NGINX 负载平衡:上游 SSL 名称

NGINX 负载平衡:上游 SSL 名称

我有以下 Nginx 配置来平衡不同节点之间的负载。但是,当我尝试重定向流量时,我获得502错误的网关

通过阅读错误日志,我发现问题与我的 Nginx 负载均衡器尝试验证 X509 证书的有效性有关不是对于各个节点(backend1.example.com,backend2.example.com),但对于上游的名称backend.example.com (无数字),导致出现如下所示的错误。

我如何告诉 nginx 使用转发节点的主机名,而不是上游的主机名?

错误日志:

upstream SSL certificate does not match "backend.example.com" while SSL handshaking to upstream...

配置:

upstream backend.example.com {
   least_conn;
   server backend1.example.com:443
   server backend2.example.com:443
}
server {

        listen [::]:443 ssl ipv6only=on;
        listen 443 ssl;
        server_name example.com;

        location / {
                proxy_pass https://backend.example.com;

                proxy_ssl_trusted_certificate /etc/ssl/certs/ca-certificates.crt;
                proxy_ssl_session_reuse on;
                proxy_ssl_verify       on;
                proxy_ssl_verify_depth 2;
                proxy_set_header Host $host;
        }
    ssl_certificate /etc/letsencrypt/.../fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/.../privkey.pem; # managed by Certbot
    include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot

}

答案1

根据nginx开发人员的说法,您需要在所有后端服务器之间共享相同的 TLS 证书。请参阅以下错误报告https://trac.nginx.org/nginx/ticket/1307#评论:5

答案2

您需要的 ngx_http_proxy_module 指令是proxy_ssl_name

您可以通过多种方式解决该问题:

  1. 尝试设置一下proxy_ssl_name $proxy_host;

  2. 使用通配符 SSL 证书。

  3. 如果在内部网络中,使用 http 连接进行上游,无需过多的双重加密,并且仅允许从反向代理服务器进行上游端的 http 连接

  4. 在每个节点上放置相同的上游证书,并将其设置为一个预期名称proxy_ssl_name backend.example.com;

相关内容