我有一个小型 Linux VPS 实例,其中设置了 nginx 来代理请求,作为多个应用程序服务器的负载均衡器。
所有流量都进入https://app.example.com代理到这些上游服务器。负载均衡器的示例 nginx 配置:
upstream app_servers {
server app-1.example.com;
server app-2.example.com;
}
server {
listen 80;
listen 443 ssl;
include snippets/ssl-app.example.com.conf;
include snippets/ssl-params.conf;
server_name app.example.com;
root /var/www/html;
location / {
# Set proxy headers
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For
$proxy_add_x_forwarded_for;
proxy_pass http://app_servers;
}
location ~ /.well-known {
allow all;
}
}
在设置代理之前,我设置了 letsencrypt 并获得了 app.example.com 的证书,现在我无法弄清楚如何配置 nginx 以将所有内容代理到上游 app_servers,除了 /.well-known 之外,以便 certbot 可以在运行此 nginx 负载平衡器的服务器上本地更新 SSL 证书。关于如何将 app.example.com/.well-known/ 路由到 letsencrypt certbot 可以在续订期间使用并成功命中的本地路径,有什么建议吗?
更新确保 .well-known 存在于 /var/www/html(Debian)并且在 conf 中设置 root 允许 certbot 正确更新。nginx conf 代码片段已更新以反映这一点。
答案1
将根目录设置为 Debian 上的默认 nginx webroot /var/www/html
,其中 certbot 最初配置为指向 .well-known 文件夹,解决了该问题。
upstream app_servers {
server app-1.example.com;
server app-2.example.com;
}
server {
listen 80;
listen 443 ssl;
include snippets/ssl-app.example.com.conf;
include snippets/ssl-params.conf;
server_name app.example.com;
root /var/www/html;
location / {
# Set proxy headers
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For
$proxy_add_x_forwarded_for;
proxy_pass http://app_servers;
}
location ~ /.well-known {
allow all;
}
}