

























这是一个创建于 488 天前的主题,其中的信息可能已经有所发展或是发生改变。
在 Nginx 配置了多个站点的情况下,如果有些站点没有启用 https (使用了通配符证书),而有些启用了 https 的话。
在浏览器中访问没有启用 https 的域名,会强制跳转到 https ,导致解析到启用了 https 的网站,而不是自己 http 的网站。
这个有没有办法在不修改客户端浏览器的情况下解决?
第 1 条附言 · 2025 年 2 月 12 日
我发现问题是,当访问一个没配置 ssl 的域名时,比如:访问 https://a.test.com ,但是它没有配置 ssl ,那么就会跳转到配置了 ssl 的一个站点去。
1 tars13344 2025 年 2 月 12 日这是浏览器的 HSTS 策略,没啥好办法 只能都配 https |
2 lpe234 2025 年 2 月 12 日不应该啊 我一般是在 `conf.d` 目录下一个项目一个配置文件。 如: `xxx.xx.conf` upstream home { server { rewrite ^ https://$http_host$request_uri? permanent; # force redirect http to https server { index index.html; location / { 并不会出现你说的这个问题 |
3 totoro625 2025 年 2 月 12 日"如果有些站点没有启用 https (使用了通配符证书)" 没有启用 https 就不要配置证书,没有配置证书就是一个正常的 http 站点 排除方式:使用一个全新的浏览器环境,直接访问 http 站点,看一下是否存在问题 |
4 yulgang 2025 年 2 月 12 日强制跳转到 https 是浏览器行为。 我猜测他是先尝试连 443 端口,你可以把服务器 443 端口临时关了试一试 如果你的服务器可以联网的话,可以考虑使用比如 let's encrypt 这样的免费证书,acme.sh 可以自动签发 reload nginx 的 |
6 lneoi 2025 年 2 月 12 日看意思是 https 是配全局了,每个站点分开来配应该就行了吧 |
9 lslqtz 2025 年 2 月 12 日ssl 建议有一个默认块来兜底全部请求 (包括非 https 网站的). |
10 jiangzm 2025 年 2 月 12 日https 请求跳转到另一个 https 站点,100%是 nginx 配置问题, 这个看配置就知道问题在哪 你的 A 站只启用了 http 但是当前 ip 有 443 端口,你访问 A 域名的 https 肯定是能接收到请求的, 正确做法是所有的 https server_name 都指定具体域名不要写通配域名“*.xx.com”也不要兜底的"_"。 这样访问 A 站肯定没有 https 服务了。 |
11 Akasoent 2025 年 2 月 12 日配置文件脱敏后发出来。 |
12 Xheldon 2025 年 2 月 12 日> 我发现问题是,当访问一个没配置 ssl 的域名时,比如:访问 https://a.test.com ,但是它没有配置 ssl ,那么就会跳转到配置了 ssl 的一个站点去。 Nginx 的匹配是顺序匹配的,80 端口没匹配到就跑下面的 443 规则了,如果没有就会返回最后一个兜底的链接而不管 server_name 是什么,你可以试试 |
13 kenshin912 2025 年 2 月 12 日我大概看懂了 OP 的意思 . 我这里是这么做的 , 在 Nginx.conf 中修改默认配置 , 启用 ssl_reject_handshark . ```nginx geo $public_ip { server { ssl_reject_handshake on; if ($public_ip) { error_page 400 494 495 496 497 =444 /; root /xxx/xxxx/default; } ``` |
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。