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

相关文章

  • Prometheus 和 Grafana 通过nginx-exporter监控nginx的详细步骤

    Prometheus 和 Grafana 通过nginx-exporter监控nginx的

    nginx-exporter 是 Prometheus 用来从 Nginx 收集指标的组件,这篇文章给大家介绍Prometheus 和 Grafana 通过nginx-exporter监控nginx的详细步骤,感兴趣的朋友跟随小编一起看看吧
    2024-08-08
  • 一篇文章读懂nginx的gzip功能

    一篇文章读懂nginx的gzip功能

    nginx提供了对文件内容压缩的功能,允许将内容在发送到客户端之前根据具体的策略进行压缩从而节约带宽,下面这篇文章主要给大家介绍了如何通过一篇文章读懂nginx的gzip功能,需要的朋友可以参考下
    2022-05-05
  • Nginx七层负载均衡之动静分离思路详解

    Nginx七层负载均衡之动静分离思路详解

    Nginx动静分离简单来说就是把动态跟静态请求分开,不能理解成只是单纯的把动态页面和静态页面屋里分离,这篇文章主要介绍了Nginx七层负载均衡之动静分离思路详解,需要的朋友可以参考下
    2024-02-02
  • nginx多location配置实例代码

    nginx多location配置实例代码

    公司测试环境使用nginx部署多个前端项目,下面这篇文章主要给大家介绍了关于nginx多location配置的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2023-04-04
  • Nginx SSL/TLS配置的实现

    Nginx SSL/TLS配置的实现

    Nginx支持SSL/TLS协议,用于加密HTTPS通信,本文主要介绍了Nginx SSL/TLS配置的实现,具有一定的参考价值,感兴趣的可以了解一下
    2025-02-02
  • 一文了解nginx HTTP安全响应问题

    一文了解nginx HTTP安全响应问题

    一些网站系统会经常遭到各类XSS攻击、点劫持等,从而造成重要信息的泄露以及服务器安全问题,本文就来介绍一下,感兴趣的可以了解一下
    2023-11-11
  • 部署Nginx+Apache动静分离的实例详解

    部署Nginx+Apache动静分离的实例详解

    Nginx不仅能作为Web服务器,还具有反向代理、负载均衡和缓存的功能,这篇文章主要介绍了部署Nginx+Apache动静分离的实例代码,需要的朋友可以参考下
    2019-12-12
  • nginx编译安装后对nginx进行平滑升级的方法

    nginx编译安装后对nginx进行平滑升级的方法

    nginx编译安装后用了一段时间后发现当前版本有漏洞或需要新的功能时就需要对当前nginx版本进行版本升级,所以这时就需到对nginx的平滑升级,如何进行平滑升级,下面就一起来了解一下
    2018-12-12
  • 详解nginx同一端口监听多个域名和同时监听http与https

    详解nginx同一端口监听多个域名和同时监听http与https

    这篇文章主要介绍了详解nginx同一端口监听多个域名和同时监听http与https的相关资料,需要的朋友可以参考下
    2017-05-05
  • Nginx安装后常用功能配置基础篇

    Nginx安装后常用功能配置基础篇

    这篇文章主要介绍了Nginx安装后常用的功能配置,为了在使用中更高效简洁,Nginx安装后通常会进行一些常用的配置,有需要的朋友可以借鉴参考下,希望能够有所帮助
    2022-03-03

最新评论