nginx反向代理返回403

H5端Linux服务器通过Nginx反向代理访问后端时遇到403错误,原因是Linux版Nginx配置与Windows不同。解决方法是在location模块中添加了详细的proxy_set_header和proxy_pass等配置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题描述:H5端linux服务器通过nginx反向代理请求后端服务器首次正常,然后就报403不允许访问。本地服务器windows通过nginx反向代理请求后端服务器正常。

原因:windows版本nginx与linux版本nginx存在细微差距,linux需要配置一些其他参数才可以进行反向代理。

解决方案:在nginx的location模块加入以下配置

location /aaa {
	  proxy_pass https://xxx.xxxx.xx;
	  proxy_set_header Host xxx.xxxx.xx;
      proxy_set_header X-Real-IP $remote_addr;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_set_header REMOTE-HOST $remote_addr;
      proxy_set_header Upgrade $http_upgrade;
      proxy_set_header Connection $connection_upgrade;
      proxy_http_version 1.1;
      proxy_ssl_session_reuse off;
      proxy_ssl_server_name on;
      proxy_ssl_name $proxy_host;
      proxy_ssl_protocols TLSv1.2;
      # proxy_hide_header Upgrade;
  
      add_header X-Cache $upstream_cache_status;
      #Set Nginx Cache
  
      set $static_fileRz9UuNee 0;
      if ( $uri ~* "\.(gif|png|jpg|css|js|woff|woff2)$" )
      {
          set $static_fileRz9UuNee 1;
          expires 1m;
      }
      if ( $static_fileRz9UuNee = 0 )
      {
          add_header Cache-Control no-cache;
      }
}

这里加的比较多,喜欢钻研的同学可以对配置进行一个个测试~

### Nginx反向代理返回403错误的解决方案 Nginx反向代理返回403错误通常与权限配置、路径设置或服务器端的访问控制策略有关。以下是几种可能的解决方案及其详细说明: #### 1. 检查文件和目录权限 确保Nginx服务对目标目录具有读取权限。如果静态资源所在的目录或文件没有适当的权限,Nginx将无法访问它们,从而导致403错误。可以通过以下命令检查并修改权限: ```bash sudo chmod -R 755 /path/to/your/directory sudo chown -R www-data:www-data /path/to/your/directory ``` 这里假设Nginx运行在`www-data`用户下[^1]。 #### 2. 配置`autoindex on` 当Nginx需要列出目录内容时,必须启用`autoindex`指令。如果没有启用此选项,访问目录时可能会触发403错误。例如: ```nginx location /img/ { root /app/; autoindex on; } ``` 通过添加`autoindex on`,可以允许Nginx列出指定目录的内容[^2]。 #### 3. 确保正确的`root`和`index`配置 在Nginx配置中,`root`指令用于指定静态文件的根目录,而`index`指令用于定义默认的索引文件。如果这些值未正确设置,可能导致403错误。例如: ```nginx server { listen 80; server_name example.com; root /app/cms/apache-tomcat-9.0.52/webapps/ms-mcms/html/web; index index.html index.htm; location ~ \.(html|htm)$ { root /app/cms/apache-tomcat-9.0.52/webapps/ms-mcms/html/web; } } ``` 确保`root`路径指向实际存在的目录,并且`index`文件存在于该目录中[^4]。 #### 4. 反向代理配置中的问题 在使用Nginx作为反向代理时,需确保传递给后端服务的请求头信息完整。例如,某些后端服务可能依赖特定的请求头(如`Host`或`X-Forwarded-For`)来验证请求来源。可以通过以下配置解决: ```nginx location / { proxy_pass http://backend_tomcat; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } ``` 这一步骤确保了后端服务能够正确解析请求来源[^3]。 #### 5. 检查后端服务的访问控制 如果Nginx反向代理到Tomcat或其他后端服务,需确认后端服务是否限制了IP地址或域名访问。例如,Tomcat的`web.xml`文件中可能包含安全约束,阻止未经授权的访问。可以通过以下方式检查并调整: ```xml <security-constraint> <web-resource-collection> <url-pattern>/*</url-pattern> </web-resource-collection> <auth-constraint/> </security-constraint> ``` 如果不需要身份验证,可以移除或调整上述配置[^4]。 #### 6. 测试配置并重启Nginx 完成所有配置更改后,务必测试Nginx配置文件的语法正确性,并重启服务以应用更改: ```bash sudo nginx -t sudo systemctl restart nginx ``` --- ### 示例配置 以下是一个完整的Nginx反向代理配置示例,结合了上述解决方案: ```nginx server { listen 80; server_name example.com; root /app/cms/apache-tomcat-9.0.52/webapps/ms-mcms/html/web; index index.html index.htm; location / { proxy_pass http://backend_tomcat; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } location /static/ { root /app/cms; autoindex on; } } ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值