Nginx 负载均衡器挂在 SSL 上

pea*_*ker 3 ssl nginx load-balancing

我试图让 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;
    }
}
Run Code Online (Sandbox Code Playgroud)

有没有人有任何想法?没有错误输出,我不确定如何找出问题所在。

编辑:

尝试连接到 HTTPS 时,日志中仍然没有任何内容。访问 HTTP 服务器时设置并运行日志(我在访问日志中获取条目)。这是日志的 nginx.conf 文件的相关部分:

access_log /var/log/nginx/nginx.vhost.access.log;
error_log /var/log/nginx/nginx.vhost.error.log;
Run Code Online (Sandbox Code Playgroud)

我刚刚测试了错误日志是否正常工作,确实如此。我是通过从配置文件中的服务器块中删除“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 相关的错误。

mas*_*oeh 5

在评论中,您已验证 nginx 进程正在运行并且telnet localhost 443正在工作。但这并不意味着外方可以访问您的nginx。您应该检查的一层是firewall。如果您不允许规则端口 443,它将检查并丢弃流向 nginx 的数据包。

旁注:Nginx 错误400 Bad request,通常意味着您在 https 端口 telnet 到 nginx 但您的请求不是明文或不完整的(例如没有定义 HTTP 标头)