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

Nginx配置HTTP跳转HTTPS在Chrome浏览器中不生效

问题原因与解决方案

这个问题本质是Chrome和Firefox对地址栏裸域名输入的默认请求策略差异,加上Docker部署环境的配置区别导致的,按下面的步骤排查就行:

  1. 先确认请求走向
    打开Chrome开发者工具,切换到网络面板,勾选「保留日志」,清空缓存后在地址栏输入裸域名my-custom-domain.com发起请求,查看第一个请求的目标端口:
    • 如果第一个请求直接发往443端口,根本没有80端口的请求记录,就是浏览器策略导致的:
      Chrome从V90版本开始默认启用HTTPS优先模式,对地址栏输入的不带协议的域名,会直接优先发起HTTPS请求,若HTTPS连接出现证书不受信、TLS握手失败等问题,不会自动降级回HTTP,因此你配置在80端口的301跳转规则根本不会被触发。而Firefox默认对无HSTS记录、首次访问的域名,HTTPS连接失败后会快速回退到HTTP请求,因此能命中你的跳转规则。
      至于本地部署Nginx无异常、Docker部署复现的差异,大概率是本地Nginx挂载的HTTPS证书已经被你加入系统信任列表,Chrome访问本地443端口时证书校验直接通过,而Docker容器内的Nginx使用的自签名证书未被系统信任,第一次HTTPS握手就被Chrome拦截,自然不会走降级到HTTP的逻辑。
    • 如果第一个请求确实发往80端口,但没有收到301响应,优先检查Docker端口映射配置:
      确认启动Nginx容器时是否同时映射了80和443端口到宿主机,正确的启动命令参考:
      docker run -d -p 80:80 -p 443:443 --name nginx-test nginx:1.23.0-alpine
      
      不少人启动容器时只映射了443端口,80端口实际未对宿主机暴露,自然无法收到跳转请求。
  2. 验证与修复
    • 临时验证:在Chrome地址栏输入chrome://flags/#https-upgrades,将该选项设置为Disabled,重启浏览器后再测试裸域名访问,若能正常跳转即可确认是浏览器HTTPS优先策略导致的问题。
    • 长期适配:不要依赖80端口的301跳转覆盖所有用户场景,给域名配置受信任的SSL证书(比如用Let's Encrypt签发免费证书),确保443端口可以正常建立HTTPS连接,就不会出现这类拦截问题。
    • 本地测试场景如果使用自签名证书,可以把Docker内Nginx使用的自签名根证书导入系统信任列表,Chrome访问时证书校验通过后,就不会卡在HTTPS握手阶段。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 14:33:28