云计算百科
云计算领域专业知识百科平台

Nginx配置路径转发到其它服务器地址时返回网站未备案的问题及解决方案

问题描述: 在已备案的域名及服务器上,使用 Nginx 进行路径转发到另一阿里云服务器地址时,返回提示域名未备案的错误响应。

已备案的云服务器上nginx配置如下:

server {     listen 443 ssl;     server_name api.com.XXX.cn;

    access_log  logs/api.com.log  main;          # ssl_certificate /path/to/your/certificate.pem;     # ssl_certificate_key /path/to/your/private.key;

    ssl_certificate      /usr/local/nginx/conf.d/api.com_nginx/api.com.ngbor.cn_bundle.crt;     ssl_certificate_key  /usr/local/nginx/conf.d/api.com_nginx/api.com.ngbor.cn.key;

    ssl_session_timeout 5m;     #请按照以下协议配置     ssl_protocols TLSv1.2 TLSv1.3;      #请按照以下套件配置,配置加密套件,写法遵循 openssl 标准。     ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;      ssl_prefer_server_ciphers on;     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;     } }

其中的服务器域名api.com.XXX.cn是已经备案且能正常访问的。

转发的地址为:http://xxx.108.194.6:18xx,单独以http://xxx.108.194.6:18xx访问转发的服务器也能正常访问返回响应数据。

错误现象:以https://api.com.XXX.cn/stag为地址转发访问时会返回一段错误提示:

<html> <head> <meta http-equiv="Content-Type" content="textml;charset=UTF-8" />    <style>body{background-color:#FFFFFF}</style>  <title>Non-compliance ICP Filing</title>   <script language="javascript" type="text/javascript">          window.onload = function () {             document.getElementById("mainFrame").src= "http://batit.aliyun.com/alww.html?id=00000000004369016636";              } </script>    </head>   <body>     <iframe style="width:860px; height:500px;position:absolute;margin-left:-430px;margin-top:-250px;top:50%;left:50%;" id="mainFrame" src="" frameborder="0" scrolling="no"></iframe>     </body>       </html>

在浏览器中输入提示中的地址链接: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 配置,掌握其细节,这样可以更好地解决各种问题,确保服务的正常运行。

赞(0)
未经允许不得转载:网硕互联帮助中心 » Nginx配置路径转发到其它服务器地址时返回网站未备案的问题及解决方案
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!