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
相关产品推荐
相关产品推荐

