我正在尝试让 nginx 在我的 Web 服务器上进行负载平衡,同时在负载平衡器级别终止 SSL。我使用的 nginx.conf 文件基于执行此操作的所有指南,但我无法让它工作。当使用标准 HTTP 时,负载平衡器工作正常。但是,当尝试通过 HTTPS 访问负载平衡器时,浏览器会挂起,最终给出 ERR_CONNECTION_REFUSED。
在尝试 HTTPS 时,我没有在日志中看到任何错误,甚至在访问日志中也看不到任何错误,所以我不知道问题可能出在哪里。我尝试了很多不同的配置选项,包括尝试不同的 SSL 证书、PEM 编码、捆绑证书等,但都无济于事。
以下是 nginx.conf 的主要部分:
upstream backend {
#web01
server 10.01.01.102;
#web02
server 10.02.02.77;
}
#setup proxy
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# standard http server
server {
listen 80;
listen 4444;
server_name *.example.com;
location / {
proxy_pass http://backend;
}
}
#server for https requests
server {
listen 443 ssl;
server_name *.example.com;
#ssl on;
ssl_certificate /path/to/example.com.crt;
ssl_certificate_key /path/to/example.com.key;
location / {
proxy_pass http://backend;
}
}
有人有什么想法吗?没有错误输出,我不知道如何找出问题所在。
编辑:
尝试连接到 HTTPS 时,日志中仍然没有任何内容。访问 HTTP 服务器时,日志已设置并正常工作(我获取了访问日志中的条目)。以下是 nginx.conf 文件中与日志相关的部分:
access_log /var/log/nginx/nginx.vhost.access.log;
error_log /var/log/nginx/nginx.vhost.error.log;
我刚刚测试了错误日志是否正常工作,结果确实如此。我通过从配置文件中的服务器块中删除“ssl_certificate”条目,然后尝试再次连接。错误日志 ( /var/log/nginx/nginx.vhost.error.log;
) 显示:
2014/09/23 13:41:28 [error] 10047#0: *9 no "ssl_certificate" is defined in server listening on SSL port while SSL handshaking, client: 127.0.0.1, server: 0.0.0.0:443
。
我已将 ssl_certificate 条目放回原位,但我想确认错误日志是否正常工作。我还查看了 /var/log 中的所有日志,没有看到任何与 nginx 相关的错误。
答案1
在评论中,您已验证 nginx 进程正在运行且telnet localhost 443
正常工作。但这并不意味着外部方可以访问您的 nginx。您应该检查的一层是防火墙。如果您不允许规则访问端口 443,它将检查并丢弃流向 nginx 的数据包。
边注:Nginx 错误400 Bad request
,通常意味着你通过 https 端口 telnet 到 nginx,但你的请求不是明文或不完整(例如没有定义 HTTP 标头)