【发布时间】:2022-03-02 22:17:39
【问题描述】:
我是 nginx 反向代理配置的新手。我们需要设置代理服务器以将请求路由到需要 IP 白名单的远程服务器。也有两种方式的 SSL。
我们一直在努力解决这个问题。以下是配置:
server {
listen 80;
server_name myserver.com;
return 302 https://myserver.com;
}
server {
listen 443;
server_name myserver.com;
ssl on;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_ciphers "EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH";
ssl_certificate /etc/nginx/keys/my-net.crt;
ssl_certificate_key /etc/nginx/keys/my-net.key;
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
location / {
resolver 8.8.8.8;
set $backend "https://remoteserver.com";
proxy_pass $backend;
proxy_ssl_server_name on;
proxy_ssl_trusted_certificate /home/ubuntu/myfile.pem;
proxy_ssl_session_reuse off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwared-For $proxy_add_x_forwarded_for;
}
}
我们面临的问题是代理服务器正在将域名解析为 IP,因为 SSLhandshake 失败。我们需要停止这个并点击域名,因为证书在域名上。
error.log 中的错误
2022/03/02 14:10:02 [error] 27012#27012: *8 SSL_do_handshake() failed (SSL: error:14094410:SSL routines:ssl3_read_bytes:sslv3 alert handshake failure:SSL alert number 40) while SSL与上游握手,客户端:,服务器:,请求:“POST HTTP/1.1”,上游:“https:”,主机:“” 2022/03/02 14:10:02 [alert] 27012#27012: *8 socket() 在连接到上游时失败(97:协议不支持地址系列),客户端:,服务器:,请求: “POST /gateway/api/txb/v1/payments/transfer-payment HTTP/1.1”,上游:“https://[IPv6]:443/”,主机:“”
已经在这里尝试了解决方案,但没有运气 - How to stop nginx from resolving upstream to ip?
【问题讨论】:
-
“我们一直在努力解决这个问题。” - 我不清楚这是什么。请描述您面临的实际障碍,而不是仅仅陈述一些不具体的“问题”并转储配置。
-
已更新。感谢您指出。
-
“我们面临的问题是...... SSLhandshake 失败了。” - 那是你的问题。 "... 代理服务器正在将域名解析为 IP,因为..." - 这只是您假设它失败的原因。假设您已经拥有
proxy_ssl_server_name on,这个假设是错误的。由于其他(未知)原因,它失败了。请检查服务器上的 curl、openssl s_client ..或类似名称,是否可以从服务器访问https://remoteserver.com。 -
在问题中也添加了错误消息。从 nginx 到目标服务器的 CURL 按预期工作。同样,假设的原因是错误日志在 URL 中显示 IP 而不是主机名。谢谢!
-
nginx 必须将域解析为 IP 地址才能连接到上游。但这不是您链接的问题中讨论的问题的重点,而是 nginx 没有使用 SNI 在 TLS 握手中发送域名。这已通过使用
proxy_ssl_server_name on;解决 - 这也显示在您的配置中。所以这看起来像是一个不同的问题,与您在标题中声称的内容无关。与来自 curl 的成功连接相比,看到来自 nginx 的失败连接的数据包捕获会很有趣。另请查看上游日志以获取错误信息。
标签: nginx ssl nginx-reverse-proxy