Nginx配置动态代理后通过curl访问报403问题

 更新时间:2023年06月15日 09:51:16   作者:ProgrammingAh  
本文主要介绍了Nginx配置动态代理后通过curl访问报403问题,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

今天生产环境遇到了一个问题,在测试环境其他系统调用我们系统的一个接口没问题,在生产环境死活调不通

问题描述

有业务人员反馈最近刚发版的一个服务提供的接口,其他系统一直调用不通。

尝试解决

分析

单体项目,系统部署架构很简单,抽象一下如下图所示:

image.png

经过几次尝试有如下发现:

  • 浏览器上访问正常,不管是外网还是局域网
  • 通过curl请求接口,请求tomcat地址正常,请求nginx地址返回403
  • 其他系统通过通过nginx地址调用返回403,通过tomcat地址就正常

在网上找的解决方案

在网上搜索nginx配置动态代理报403,一般搜到4种情况

1、由于启动用户和 nginx 工作用户不一致所致

对比nginx配置文件中的用户与实际启动nginx用户是否一致

# 查看实际启动用户
ps -ef | grep nginx
# 查看配置文件中配置的用户
cat /usr/local/nginx/conf/nginx.conf

2、缺少 index.html 或者 index.php 文件,就是配置文件中 index index.html index.htm 这行中的指定的文件

查看root的配置目录下是否有index.html等文件,没有的话会报403

server {
	listen 80;
	server_name localhost;
	index index.html;
	root /data/www;
}

3、权限问题,如果 nginx 没有 web 目录的操作权限,也会出现 403 错误

运行nginx的用户对root的配置目录没有读写权限

# 修改web目录的读写权限,或者把nginx的启动用户改成目录的所属用户,或者将web目录的所属用户改为nginx的启动用户,重启nginx即可
chmod -R 777 /data/www
chown -R nginx:nginx /data/www

4、SELinux 设置为开启状态(enabled)的原因

# 查看当前selinux的状态
/usr/sbin/sestatus -v
# 将SELINUX=enforcing修改为selinux=disabled
vi /etc/selinux/config
SELINUX=disabled
# 重启系统生效
reboot

是终解决

最终发现都不是上述四种情况,经过多方分析,发现配置目录下多了一个配置/usr/local/nginx/conf/conf.d/agent_deny.config,内容大概如下所示:

# 禁止Scrapy等工具的抓取
if ($http_user_agent ~* (Scrapy|Curl|HttpClient)) {
	return 403;
}
# 禁止UA及UA为空的访问
# 。。。
# 禁止非GET/POST方式的抓取
# 。。。

第一条就将curl和httpclient给禁用了,这也就解决了问题描述里对方系统调用接口和使用curl调用nginx地址时调不通的原因了。

解决方法,最终提供两个思路:

1、httpclient调用时修改User_Agent

2、直接调用tomcat接口

总结

遇到问题多总结,网上的答案不一定能解决你的问题,还要具体问题具体分析,多分析现象,根据现象找到蛛丝马迹。

到此这篇关于Nginx配置动态代理后通过curl访问报403问题的文章就介绍到这了,更多相关Nginx动态代理报403内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Windows下使用 Nginx 搭建 HTTP文件服务器 实现文件下载功能

    Windows下使用 Nginx 搭建 HTTP文件服务器 实现文件下载功能

    Nginx 是一款轻量级的 HTTP 服务器,采用事件驱动的异步非阻塞处理方式框架,这让其具有极好的 IO 性能,时常用于服务端的反向代理和负载均衡,这篇文章主要介绍了Windows下使用 Nginx 搭建 HTTP文件服务器实现文件下载功能,需要的朋友可以参考下
    2023-03-03
  • Nginx防盗链与服务优化配置的全过程

    Nginx防盗链与服务优化配置的全过程

    由于Nginx本身的一些优点,轻量,开源,易用,越来越多的公司使用nginx作为自己公司的web应用服务器,下面这篇文章主要给大家介绍了关于Nginx防盗链与服务优化配置的相关资料,需要的朋友可以参考下
    2022-01-01
  • 在Nginx中隐藏版本号的方法详解

    在Nginx中隐藏版本号的方法详解

    Nginx是一款高性能的Web服务器软件,它支持反向代理、负载均衡、缓存等功能,在使用 Nginx 的过程中,有时候我们需要隐藏 Nginx 的版本号,以增强服务器的安全性,所以接下来小编将给大家介绍如何在Nginx中隐藏版本号,需要的朋友可以参考下
    2023-11-11
  • Nginx中多种负载均衡策略配置的实战指南

    Nginx中多种负载均衡策略配置的实战指南

    在当今高并发、大流量的互联网应用中,单台服务器往往难以承受巨大的访问压力,负载均衡作为解决这一问题的关键技术,能够将请求分发到多台服务器上,本文将深入探讨Nginx负载均衡的各种策略和配置方法,大家可以根据需要进行选择
    2025-10-10
  • nginx配置选项try_files的用法及说明

    nginx配置选项try_files的用法及说明

    这篇文章主要介绍了nginx配置选项try_files的用法及说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2025-10-10
  • nginx中proxy_set_header参数的实现

    nginx中proxy_set_header参数的实现

    本文详细介绍了Nginx中proxy_set_header指令的用法,通过设置不同的请求头信息,可以实现更灵活的反向代理功能,具有一定的参考价值,感兴趣的可以了解一下
    2024-12-12
  • Nginx实现灰度发布的多种策略分享

    Nginx实现灰度发布的多种策略分享

    灰度发布是一种重要的策略,它允许我们在不影响所有用户的情况下逐步推出新功能或更新,本文介绍了Nginx实现灰度发布的多种策略,有需要的小伙伴可以了解下
    2026-04-04
  • 定期删除OpenResty/Nginx大日志文件的方法

    定期删除OpenResty/Nginx大日志文件的方法

    这篇文章主要介绍了定期删除OpenResty/Nginx大日志文件的方法,文中通过代码示例给大家讲解的非常详细,对大家的学习或工作有一定的帮助,需要的朋友可以参考下
    2024-05-05
  • nginx报错upstream sent invalid header的解决

    nginx报错upstream sent invalid header的解决

    本文主要介绍了nginx报错upstream sent invalid header的解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-12-12
  • nginx里的rewrite跳转的实现

    nginx里的rewrite跳转的实现

    这篇文章主要介绍了nginx里的rewrite跳转的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-11-11

最新评论