解释 Certbot 的 HTTPS 重定向配置

Dan*_*iel 7 nginx lets-encrypt certbot

有人可以解释为什么 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
}
Run Code Online (Sandbox Code Playgroud)

而不是简单地这个?

server {
    server_name example.com;
    listen 80;
    return 301 https://$host$request_uri;
}
Run Code Online (Sandbox Code Playgroud)

server_name基本上说这个配置只适用于 example.com,所以$host永远不会有什么不同,或者我错过了什么?

Håk*_*ist 11

我认为这里的问题是,如果这恰好是该地址/端口组合的第一个,并且该地址/端口server没有其他参数,则这将成为默认服务器,充当未知主机的包罗万象。serverdefault_serverserver

请参阅请求处理文档以获取概述,以及有关默认服务器行为的一些细节的listen文档:

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

  • 正确的。[这实际上是为了修复安全漏洞。](https://community.letsencrypt.org/t/security-issue-with-redirects-added-by-certbots-nginx-plugin/51493) (4认同)