Nginx配置路径转发到其它服务器地址时返回网站未备案的问题及解决方案
问题描述: 在已备案的域名及服务器上,使用 Nginx 进行路径转发到另一阿里云服务器地址时,返回提示域名未备案的错误响应。
已备案的云服务器上nginx配置如下:
server { access_log logs/api.com.log main; ssl_certificate /usr/local/nginx/conf.d/api.com_nginx/api.com.ngbor.cn_bundle.crt; ssl_session_timeout 5m; |
其中的服务器域名api.com.XXX.cn是已经备案且能正常访问的。
转发的地址为:http://xxx.108.194.6:18xx,单独以http://xxx.108.194.6:18xx访问转发的服务器也能正常访问返回响应数据。
错误现象:以https://api.com.XXX.cn/stag为地址转发访问时会返回一段错误提示:
在浏览器中输入提示中的地址链接:http://batit.aliyun.com/alww.html?id=00000000004369016636
返回如下页面:
提未网站未备案。
问题原因
proxy_set_header Host $Host:$server_port;
这一行的作用是将原 HTTP 请求中的 Host
字段也转发到目标服务器。在这个情况下,Host
字段值为我们自己域名而不是 xxx.108.194.6:18xx,所以阿里云服务器查 Host
头时发现了不匹配的情况,因而拒绝了请求。
解决方案
为了解决这个问题,我们需要调整 Nginx 配置,移除导致备案检查失败的 Host
头设置。以下是修改后的配置:
location /stag/ { proxy_pass http://xxx.108.194.6:18xx/; # proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } |
通过删除 proxy_set_header Host $host,避免了将原始的 Host
头转发到目标服务器,从而避免了备案问题的干扰。
总结
在进行 Nginx 配置时,了解每一个指令的作用是非常重要的。特别是 proxy_set_header
指令,它直接影响到请求头的转发方式。如果遇到类似的问题,一定要详细检查配置,确保转发的请求头符合目标服务器的要求。
一定要多了解 Nginx 配置,掌握其细节,这样可以更好地解决各种问题,确保服务的正常运行。