如何强制Nginx针对上游服务器块中存在的主机名验证上游证书?

时间:2017-03-26 19:30:41

标签: nginx proxy ssl-certificate reverse-proxy

我正在尝试在代理路径的每一层实现HTTPS协议通信。我的代理路径是从客户端到负载均衡器(nginx),然后是从nginx到上游服务器。

当请求从nginx代理到上游服务器时,我遇到了问题。

我在nginx日志中收到以下错误

2017/03/26 19:08:39 [error] 76753#0: *140 upstream SSL certificate does not match "8ba0c0da44ee43ea894987ab01cf4fbc" while SSL handshaking to upstream, client: 10.191.200.230, server: abc.uscom-central-1.ssenv.opcdev2.oraclecorp.com, request: "GET /a/a.html HTTP/1.1", upstream: "https://10.240.81.28:8001/a/a.html", host: "abc.uscom-central-1.ssenv.opcdev2.oraclecorp.com:10003"

这是我对上游服务器块的配置

upstream 8ba0c0da44ee43ea894987ab01cf4fbc {
                            server slc01etc.us.oracle.com:8001 weight=1;
                    keepalive 100;
}

proxy_pass https://8ba0c0da44ee43ea894987ab01cf4fbc;
proxy_set_header Host $host:10003;
proxy_set_header WL-Proxy-SSL true;
proxy_set_header IS_SSL ssl;
proxy_ssl_trusted_certificate /u01/data/secure_artifacts/ssl/trusted_certs/trusted-cert.pem;
proxy_ssl_verify on;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

当请求从Nginx发送到上游服务器时,nginx将上游ssl证书与proxy_pass指令中存在的模式进行匹配。但我的上游ssl证书模式是上游服务器主机名(slc01etc.us.oracle.com)。

有没有办法,我可以强制Nginx根据上游服务器块中提供的服务器主机名验证上游ssl证书,而不是proxy_pass directibve中存在的模式?

1 个答案:

答案 0 :(得分:0)

我们可以在nginx中使用“ proxy_ssl_name”指令。它允许覆盖主机名,nginx应该使用该主机名来验证后端服务器的证书。

proxy_ssl_name mybackend-server.hostname.com;