nginx

关注公众号 jb51net

关闭
首页 > 网站技巧 > 服务器 > nginx > Nginx动态代理报403

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

作者:ProgrammingAh

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

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

问题描述

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

尝试解决

分析

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

image.png

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

在网上找的解决方案

在网上搜索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内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文