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

Nginx单443 Server Block致非指定HTTPS请求跳转问题求助

解决Nginx未配置域名的HTTPS请求跳转问题

我明白你的问题了——因为Nginx当前只有一个HTTPS server块,它会被当作默认的HTTPS服务器,所有不匹配任何server_name的HTTPS请求都会落到这个块里,最终导致你看到的意外跳转(或非预期内容返回)。要实现未配置域名的HTTPS请求返回404,我们只需要添加一个专门的默认HTTPS server块即可。

问题根源

当Nginx处理HTTPS请求时:

  • 如果客户端支持SNI(现在绝大多数浏览器都支持),Nginx会根据请求中的域名匹配对应的server_name;
  • 如果没有匹配到对应的server块,或者客户端不支持SNI,Nginx会使用第一个加载的HTTPS server块(或者显式标记为default_server的块)作为默认处理者。
    你的情况就是唯一的HTTPS server块被当作了默认,所以所有未配置的HTTPS请求都走了这个块。

解决方案

添加一个显式的默认HTTPS server块,让它接收所有未匹配的HTTPS请求并返回404,同时保留你原有的foo.example.com配置:

  1. 在你的Nginx配置中(可以单独新建一个配置文件,或者添加到现有文件顶部),插入以下默认server块:
server {
    listen 443 ssl default_server;
    listen [::]:443 ssl default_server; # 可选,如果你需要支持IPv6

    # 这里需要配置SSL证书才能完成握手,直接复用你现有foo.example.com的证书即可
    ssl_certificate /etc/letsencrypt/live/foo.example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/foo.example.com/privkey.pem;
    include /etc/letsencrypt/options-ssl-nginx.conf;
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;

    # 直接返回404
    return 404;
}
  1. 确保你原有的foo.example.com的HTTPS server块的listen指令没有default_server标记(你的现有配置已经是listen 443 ssl;,符合要求)。

  2. 验证配置并重启Nginx:

nginx -t
systemctl restart nginx

说明

  • 这个默认server块会优先接收所有未匹配到server_name的HTTPS请求,直接返回404状态码;
  • 虽然使用foo.example.com的证书处理其他域名的HTTPS请求会导致浏览器提示证书不匹配,但这不影响Nginx返回404的逻辑;
  • 测试前记得清除浏览器缓存,避免之前的跳转记录干扰结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 07:34:34