Nginx

Nginx 負載均衡器掛在 SSL 上

  • September 24, 2014

我正在嘗試讓 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 標頭)

引用自:https://serverfault.com/questions/630425