You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

NGINX HTTP转HTTPS重定向异常:跨服务器请求返回301

问题分析与解决方案

核心问题原因

你的问题源于两个关键细节:

  1. 当其他服务器通过公网IP X.X.X.X 发起请求时,请求头的Host字段是X.X.X.X,但你NGINX 80端口的server块仅匹配private-domain.company.local。此时NGINX会使用第一个匹配的server块处理请求,重定向时用$server_name生成的Location是内部私有域名——其他服务器通常无法解析这个内部域名,因此虽然收到301响应,但无法完成后续跳转。
  2. 浏览器访问正常是因为浏览器可能通过内部DNS解析了私有域名,或者你在浏览器地址栏输入的是私有域名而非公网IP,请求头的Host字段匹配了NGINX的server_name。

解决方案1:调整NGINX重定向规则(推荐)

修改80端口的server块,用$host替代$server_name,并添加公网IP到server_name列表,确保所有80端口请求都能正确重定向:

server {
    listen          80 default_server; # 确保所有未匹配的80端口请求都进入该块
    server_name     private-domain.company.local X.X.X.X; # 同时匹配私有域名和公网IP
    return  301     https://$host$request_uri; # 用请求头的Host值生成重定向目标
}

server {
    listen  443     ssl;
    server_name     private-domain.company.local X.X.X.X; # 同步添加公网IP到HTTPS块
    access_log      /var/log/nginx/web.access.log;
    error_log       /var/log/nginx/web.error.log;

    ssl_certificate         /etc/nginx/ssl/web.crt;
    ssl_certificate_key     /etc/nginx/ssl/web.key;
    ssl_ciphers             EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH;
    ssl_protocols           TLSv1.1 TLSv1.2;

    location /{
            proxy_pass      http://localhost:3000;
    }

    location /api {
            proxy_pass      http://localhost:8050/api/;
    }
}
  • default_server:确保所有未匹配到其他server块的80端口请求都进入该处理逻辑
  • $host:优先取请求头的Host值,既支持私有域名也支持公网IP的重定向
  • 添加X.X.X.X到server_name:明确匹配公网IP的请求

配置修改后,执行以下命令验证并重载NGINX:

nginx -t # 检查配置语法
systemctl reload nginx # 重载配置

解决方案2:在F5层面完成HTTP转HTTPS重定向

既然F5是公网流量的入口,可直接在F5上配置规则,将X.X.X.X:80的所有请求重定向到X.X.X.X:443。这种方式更高效,能统一管理入口流量的重定向逻辑,NGINX只需处理HTTPS请求即可。


解决方案3:配置F5传递正确Host头

如果业务必须使用私有域名访问后端,需在F5上配置代理规则,将请求的Host头强制设置为private-domain.company.local后再转发给NGINX。这样NGINX收到的请求Host匹配server_name,重定向的Location也是私有域名,其他服务器若能通过内部DNS解析该域名,即可正常完成跳转。


测试验证

修改配置后,用curl测试:

curl -X POST http://X.X.X.X/api/url/to/send -v

此时应返回301到https://X.X.X.X/api/url/to/send(方案1),可添加-L参数让curl自动跟随重定向:

curl -X POST http://X.X.X.X/api/url/to/send -v -L

内容的提问来源于stack exchange,提问作者Bayarjargal Jargalsaikhan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 22:02:56