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 相關的錯誤。
在評論中,您已驗證 nginx 程序正在執行並且
telnet localhost 443
正在執行。但這並不意味著外方可以到達你的nginx。您應該檢查的一層是防火牆。如果您不允許規則到埠 443,它將檢查並丟棄流向 nginx 的數據包。旁注:Nginx 錯誤
400 Bad request
,通常意味著您在 https 埠中遠端登錄到 nginx,但您的請求不是明文或不完整的(例如,沒有定義 HTTP 標頭)