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



我可以成功地将流量从端口80路由到HTTPS,还可以成功地获得Let's Encrypt SSL证书。但当我想同时执行时,我的问题就开始了。

每当我的证书到期时,我都必须调整配置以通过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并以/.accknowled/acme challenge开头,则转到该challenge。

任何其他内容:301到https。

检查的优先级首先是regex(location~^blablabla(,然后是一般的(location/{(

如果它不起作用,你的互动是什么?

最新更新