将所有请求重定向到 HTTPS,除了一个子目录

SaA*_*mic 18 http nginx https redirect lets-encrypt

我正在尝试从我的 nginx 网络服务器上的自签名证书转移到 Let's Encrypt 证书。

目前,我将所有请求重定向http/80https/443,它使用我不久前创建的自签名证书。

现在 - 据我所知,Let's Encrypt 向端口 80 发出请求(因为我正在使用 的webroot选项certbot)。这些请求被重定向,导致证书生成失败。

我尝试使用以下服务器块来实现这一点,监听端口 80:

server {
        listen  80;     
        server_name     sub.domain.tld;
        server_tokens   off;


        location /.well-known {
                root /var/www/letsencrypt;
        }

        location / {
                return 301 https://$host$request_uri;
        }
}
Run Code Online (Sandbox Code Playgroud)

但是无论如何/.well-known都将请求重定向到https/443

我如何可以重定向所有的请求来自http/80https/443,除了要求/.well-known/

Ter*_*nen 23

尝试这个:

server {
    listen  80;     
    server_name     sub.domain.tld;
    server_tokens   off;

    root /var/www/letsencrypt;

    location /.well-known {
        try_files $uri $uri/ =404;
    }

    location / {
        return 301 https://$host$request_uri;
    }
}
Run Code Online (Sandbox Code Playgroud)

由于try_files您的虚拟服务器中没有条目,它不知道如何处理来自/.well-known.

  • 没有 `try_files` 的 `location` 只是从 `root` 目录发送文件。 (2认同)