反向 Nginx 代理后面的 Letsencrypt 客户端

反向 Nginx 代理后面的 Letsencrypt 客户端

一般设置如下:

我有一台具有公共 IP 地址的服务器(我将其称为前端机器),它运行 Nginx 并提供一些使用 Letsencrypt 证书保护的网页。

现在我们要添加一台新机器(我们称之为后端机器),运行另一个 webapp 和几个其他需要通过 Letsencrypt 的 SLL 证书保护的应用程序。该 webapp 由 Apache 提供服务,位于前端机器的反向代理后面的自己的子域中。

通常情况下,我只会在前端机器上终止 SSL,然后与后端机器进行 HTTP 通信,但在这种情况下,这是不可能的。后端机器必须是具有子域 SSL 证书的机器。所以我想我只需设置一个不添加任何标头的反向代理,即可将对该域的所有请求转发到后端服务器。我在前端机器上的 Nginx 配置如下所示:

#sub.domain.com
server {
    listen 443 ssl;
    listen [::]:443 ssl;
    server_name sub.domain.com;

    error_log            /var/log/nginx/subdomain.error.log;

    location / {
        # Fix the “It appears that your reverse proxy set up is broken" error.
        proxy_pass          https://192.168.11.3;
        proxy_ssl_verify       off;
        proxy_read_timeout  90;
        proxy_redirect      https://192.168.11.3 https://sub.domain.com;
    }

}

server {
   listen 80;
   listen [::]:80;
   server_name sub.domain.com;

    location / {
        proxy_pass          http://192.168.11.3;
        proxy_read_timeout  90;
        proxy_redirect      http://192.168.11.3 http://sub.domain.com;
    }
}

然后我尝试使用 letsencrypt 的“临时网络服务器”功能在后端机器上从 Letsencrypt 请求证书,但它给出了以下错误:

   Domain: sub.domain.com
   Type:   unauthorized
   Detail: Incorrect validation certificate for TLS-SNI-01 challenge.
   Requested
   {LONG TOKEN REMOVED}.acme.invalid
   from XXX.XXX.XXX.XXX:443. Received 2 certificate(s), first
   certificate had names "othersub.domain.com"

   To fix these errors, please make sure that your domain name was
   entered correctly and the DNS A record(s) for that domain
   contain(s) the right IP address.

所以我的问题是:我该如何实现它?我的想法是前端反向代理应该能够将 letsencrypt 发出的请求转发到 Web 服务器以验证客户端,但它似乎不起作用。任何帮助都非常感谢!

答案1

您仍需要在前端 nginx 机器上终止 SSL 请求,方法是在前端机器上安装 sub.domain.com 的证书。就像您在反向代理场景中使用 http 时所做的一样。在这种情况下,唯一的区别是您还需要在后端和前端机器之间建立有效的证书协议。

相关内容