报错是这么冒出来的。站点用非标准端口对外提供服务,访问 http 时能打开,被重定向到 https 之后地址变成默认端口,浏览器直接报连接被拒绝。

原因不止一个,得分开看。跳转规则里写死了域名,没有带上原端口。少数情况下是拼接地址时只取了主机名变量,端口被丢掉。

少数情况下是前置代理传递的地址信息里本来就没有端口。

上来先看跳转响应里的目标地址

curl -I http://域名:8080

然后核对跳转规则写法

grep -rn 'return 301' /etc/nginx/conf.d/

随后用变量保留端口

grep -n 'server_port' /etc/nginx/conf.d/app.conf

剩下的就是重载后验证跳转结果

curl -I http://域名:8080 | grep -i location

改之前我把相关日志按时间截了一段存着,事后对时间线用得上。

恢复的判定其实很直接。跳转后的地址带上原来端口,浏览器能正常打开 https 页面,不再报连接失败。

这里还有个坑。用变量拼地址更稳妥,但上线前要在测试环境确认变量的实际展开值,别把它当成普通字符串输出。同一份配置在测试环境跑通,不代表线上没事,两边的默认值经常不一样。

作者 9823189