nginx 负载均衡器 w/https 并允许加密证书续订

nginx 负载均衡器 w/https 并允许加密证书续订

我有一个小型 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;
  }
}

相关内容