NGINX 重定向到 HTTPS,同时仍然为 Let's Encrypt 挑战维护 HTTP 路由

NGINX redirect to HTTPS, while still maintaining HTTP route for Let's Encrypt Challenges

我可以成功将流量从端口 80 路由到 HTTPS,我也可以成功获得 Let's Encrypt SSL 证书。但是当我想做 both.

时,我的问题就开始了

每当我的证书到期时,我都必须调整配置以通过 Let's Encrypt 挑战。那可不行。

这是通过挑战的配置成功

server {
    listen      80;
    listen [::]:80;
    server_name example.com *.example.com;

    #for certbot challenges (renewal process)
    location ~ /.well-known/acme-challenge {
        allow all;
        root /data/letsencrypt;
    }

    root /data/letsencrypt;
    index index.html;
}

这是一个将流量路由到 HTTPS

的配置
server {
    listen      80 default_server;
    listen [::]:80 default_server;
    server_name example.com *.example.com;

    location / {
        return 301 https://$host$request_uri;
    }

    return      444;
}

每当我开始尝试将它们结合起来时,到 HTTPS 的路由似乎接管了挑战并且挑战中断了。

注意我在 Docker 环境中使用 Nginx 作为反向代理也很有用,因此我从 HTTP 路由到 HTTPS,然后从那里进行反向代理用于其他服务。

server{

    listen      80;
    listen [::]:80;
    server_name example.com *.example.com;

    #for certbot challenges (renewal process)
    location ~ ^/.well-known/acme-challenge {
        allow all;
        root /data/letsencrypt;
    }

    location / {
       return 301 https://$host$request_uri ;
    }
}

应该可以解决问题。

如果端口 80 并以 /.well-known/acme-challenge 开头,则进入挑战。

其他:301 到 https。

并且检查的优先级首先是正则表达式 (location ~ ^blablabla) 然后是一般 ( location / { )

如果不起作用,您进行的互动是什么?