Nginx 负载均衡器挂在 SSL 上

Nginx 负载均衡器挂在 SSL 上

我正在尝试让 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 标头)

相关内容