[UPDATE]
此has been raised a a bug支持NGINX。
我使用了NGINX网站的默认配置文件(但没有双向身份验证),以便通过SSL在proxy_ssl_verify
设置为on
的情况下在四个上游应用服务器之间进行负载平衡。是的,所有上游服务器都具有CN匹配其主机名的有效证书,并且CA已被放置在具有适当权限的NGINX服务器上,并在nginx.conf文件中设置。以下是我的发现(删除了配置的其余部分,因为它不相关):
确定 - 适用于proxy_ssl_verify off
:
stream { upstream upstream_appsrv{ server serverA.domain.com:443; } server { listen 8443; proxy_pass https://upstream_appsrv; (...) proxy_ssl off; proxy_ssl_verify off; } }
不行 - 只要我设置proxy_ssl_verify on
+ proxy_ssl on
:
stream { upstream upstream_appsrv{ server serverA.domain.com:443; } server { listen 8443; proxy_pass https://upstream_appsrv; (...) proxy_ssl on; proxy_ssl_verify on; } }
NGINX开始抛出与后端不匹配的上游SSL证书的错误:2 upstream SSL certificate does not match "serverB.domain.com" while SSL handshaking to upstream...
让我们改变一些事情,然后转到第三步。
OK! - 现在一切正常:
stream { upstream serverA.domain.com{ server serverA.domain.com:443; } server { listen 8443; proxy_pass https://serverA.domain.com; (...) proxy_ssl on; proxy_ssl_verify on; } }
事实证明,不仅server
定义必须与上游服务器上证书中使用的CN相匹配(显然),而且upstream upstream_appsrv
需要匹配CN!好的,下一步,让我们添加另一个上游服务器:
不行......
stream { upstream serverA.domain.com{ server serverB.domain.com:443; } server { listen 8443; proxy_pass https://serverA.domain.com; (...) proxy_ssl on; proxy_ssl_verify on; } }
一旦NGINX连接到serverB,我们就会再次看到相同的错误......即使serverB已经获得了与其主机名相匹配的正确CN集(并且使用与服务器A相同的CA),但事实证明NGINX尝试了将CN与upstream
定义相匹配。这就是我要解决的问题。