解释 Certbot 的 HTTPS 重定向配置

解释 Certbot 的 HTTPS 重定向配置

有人可以解释为什么 Certbot 使用以下重定向配置

server {
    if ($host = example.com) {
        return 301 https://$host$request_uri;
    } # managed by Certbot

    server_name example.com;
    listen 80;
    return 404; # managed by Certbot
}

而不仅仅是这一个?

server {
    server_name example.com;
    listen 80;
    return 301 https://$host$request_uri;
}

server_name基本上说这个配置仅适用于 example.com,所以$host永远不会有任何不同,还是我遗漏了什么?

答案1

我认为这里的问题在于,如果这恰好是此地址/端口组合的第一个,并且此地址/端口的server其他任何组合都没有该参数,那么这将成为serverdefault_serverserver默认服务器,充当未知主机的万能捕获器。

查看请求处理文档概览,以及listen文档有关默认服务器行为的一些细节:

如果存在该default_server参数,将导致服务器成为指定address:port对。如果没有任何指令具有参数,default_server则第一个具有address:port对 将是该对的默认服务器。

相关内容