我可以成功地将流量从端口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/{(
如果它不起作用,你的互动是什么?