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

Docker Nginx配置问题:浏览器持续重定向至HTTPS

解决浏览器持续重定向至HTTPS的问题

这种浏览器强制跳HTTPS但curl正常的情况我之前踩过坑,大概率是这几个原因,咱们一步步排查:

1. 浏览器HSTS缓存搞的鬼

浏览器的**HSTS(HTTP Strict Transport Security)**会强制将HTTP请求转为HTTPS,而且这个缓存是存在本地的,curl这类命令行工具不会读取浏览器的HSTS记录,所以会出现差异。

解决办法:

  • Chrome:在地址栏输入 chrome://net-internals/#hsts,找到「Delete domain security policies」,输入my.domain.dev后点击Delete
  • Firefox:输入 about:config,搜索network.stricttransportsecurity.preloadlist,暂时设为false,或者在「隐私与安全」里清除对应网站的缓存
  • 也可以直接用浏览器的隐私模式访问,隐私模式不会加载本地HSTS缓存,能快速验证是不是这个问题

2. 检查Nginx/应用代码的重定向规则

虽然你说配置都正常,但还是要确认下:

  • 打开Nginx的站点配置文件,看看有没有类似这样的规则:
    if ($scheme != "https") {
        return 301 https://$host$request_uri;
    }
    
    或者直接的return 302 https://...,如果有但你本地没配置HTTPS,就会导致循环重定向
  • 检查PHP应用的配置:比如框架的环境配置里有没有强制HTTPS的选项(比如Laravel的APP_URL设成了https://my.domain.dev,或者Yii的请求安全配置),还有项目根目录的.htaccess(如果有的话)里有没有HTTPS重定向规则

3. Varnish缓存了重定向响应

Varnish作为反向代理,如果之前缓存了跳HTTPS的302响应,那后续浏览器请求都会拿到这个缓存结果。

解决办法:

  • 直接重启Varnish容器:docker-compose restart varnish,清空缓存
  • 测试时给curl加Cache-Control: no-cache头,看看请求是否还会跳:curl -I my.domain.dev -H "Cache-Control: no-cache",如果这个命令返回正常的HTTP响应,那就是Varnish缓存的问题

4. 浏览器插件或系统全局强制HTTPS

有些浏览器插件(比如HTTPS Everywhere)会自动将HTTP请求转为HTTPS,试试:

  • 用隐私模式打开网站(隐私模式下插件默认禁用)
  • 暂时禁用所有浏览器插件后再访问

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 11:55:55