Nginx

Nginx 隨機拒絕 SSL 連接

  • July 25, 2015

我在Nginx 反向代理後面執行網站https://telerandom.com (NodeJS 伺服器,埠 9576)。通常可以工作,但有時,它會開始拒絕來自某些使用者的所有 SSL 連接(而其他人則完全正常工作)。

拒絕 SSL 連接的這段時間通常持續大約 45 分鐘,然後一切恢復正常。我注意到同一網路上的設備(例如,我的筆記型電腦和我的手機在同一 WiFi 網路上)會同時遇到這些中斷。但是,如果我要斷開手機與 WiFi 的連接並使用蜂窩數據,它可以正常連接到網站。

伺服器上的 80 和 443 埠都是開放的。當連接被拒絕時,我在錯誤日誌中收到這些消息:

2015/07/24 20:36:19 [debug] 1695#0: *92 post event 0000000002327BB0
2015/07/24 20:36:19 [debug] 1695#0: *92 post event 000000000233B3C0
2015/07/24 20:36:19 [debug] 1695#0: *92 delete posted event 000000000233B3C0
2015/07/24 20:36:19 [debug] 1695#0: *92 http run request: "/socket.io/?EIO=3&transport=websocket&sid=_32mgWR6o50vOl7pAAAC"
2015/07/24 20:36:19 [debug] 1695#0: *92 http upstream process upgraded, fu:1
2015/07/24 20:36:19 [debug] 1695#0: *92 event timer del: 20: 1437784644303
2015/07/24 20:36:19 [debug] 1695#0: *92 event timer add: 20: 90000:1437784669313
2015/07/24 20:36:19 [debug] 1695#0: *92 delete posted event 0000000002327BB0
2015/07/24 20:36:19 [debug] 1695#0: *92 http run request: "/socket.io/?EIO=3&transport=websocket&sid=_32mgWR6o50vOl7pAAAC"
2015/07/24 20:36:19 [debug] 1695#0: *92 http upstream process upgraded, fu:0
2015/07/24 20:36:19 [debug] 1695#0: *92 SSL_read: 7
2015/07/24 20:36:19 [debug] 1695#0: *92 SSL_read: -1
2015/07/24 20:36:19 [debug] 1695#0: *92 SSL_get_error: 2
2015/07/24 20:36:19 [debug] 1695#0: *92 send: fd:20 7 of 7
2015/07/24 20:36:19 [debug] 1695#0: *92 event timer: 20, old: 1437784669313, new: 1437784669313
2015/07/24 20:36:19 [debug] 1695#0: *92 post event 0000000002327AE0
2015/07/24 20:36:19 [debug] 1695#0: *92 post event 000000000233B2F0
2015/07/24 20:36:19 [debug] 1695#0: *92 delete posted event 000000000233B2F0
2015/07/24 20:36:19 [debug] 1695#0: *92 http upstream request: "/socket.io/?EIO=3&transport=websocket&sid=_32mgWR6o50vOl7pAAAC"
2015/07/24 20:36:19 [debug] 1695#0: *92 http upstream process upgraded, fu:0
2015/07/24 20:36:19 [debug] 1695#0: *92 event timer del: 20: 1437784669313
2015/07/24 20:36:19 [debug] 1695#0: *92 delete posted event 0000000002327AE0
2015/07/24 20:36:19 [debug] 1695#0: *92 http upstream request: "/socket.io/?EIO=3&transport=websocket&sid=_32mgWR6o50vOl7pAAAC"
2015/07/24 20:36:19 [debug] 1695#0: *92 http upstream process upgraded, fu:1
2015/07/24 20:36:19 [debug] 1695#0: *92 recv: fd:20 3 of 4096
2015/07/24 20:36:19 [debug] 1695#0: *92 SSL to write: 3
2015/07/24 20:36:19 [debug] 1695#0: *92 SSL_write: 3
2015/07/24 20:36:19 [debug] 1695#0: *92 recv: fd:20 -1 of 4096
2015/07/24 20:36:19 [debug] 1695#0: *92 recv() not ready (11: Resource temporarily unavailable)
2015/07/24 20:36:19 [debug] 1695#0: *92 event timer add: 20: 90000:1437784669313

這是我的配置文件

server {
   listen 80;
   server_name telerandom.com;

   return 301 https://$host$request_uri;
}

server {

   listen 443;
   server_name telerandom.com;

   ssl_certificate           /etc/nginx/ssl/telerandom/cert.crt;
   ssl_certificate_key       /etc/nginx/ssl/telerandom/cert.key;
   ssl on;

   access_log            /var/log/nginx/telerandom.com.access.log;
   error_log             /var/log/nginx/telerandom.com.error.log debug;

   location / {

     proxy_http_version      1.1;
     proxy_set_header        Host $host;
     proxy_set_header        X-Real-IP $remote_addr;
     proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
     proxy_set_header        X-Forwarded-Proto $scheme;
     proxy_set_header        Upgrade $http_upgrade;
     proxy_set_header        Connection "upgrade";

     # Fix the "It appears that your reverse proxy set up is broken" error.
     proxy_pass          http://127.0.0.1:9576;
     proxy_read_timeout  90;

     proxy_redirect      http://127.0.0.1:9576 https://telerandom.com;
   }
}

重新啟動 Nginx 和伺服器並不能解決問題,也不能重新啟動客戶端設備。此外,這已經發生在多個網路上(有一次它開始發生在我手機的蜂窩數據上)並且發生在我以外的人身上。此外,當問題發生時,我還可以連接到 nginx 後麵類似配置的 SSL 站點

伺服器日誌中沒有什麼特別之處,表明 nginx 站點存在問題。但是,您的描述清楚地表明客戶端網路中存在問題,即

  • 只有同一網路中的客戶端受到影響
  • 同一網路中的所有客戶端都受到影響
  • 如果客戶端在遇到問題時連接到另一個網路,則問題不再發生

這可能只是客戶端網路可靠性的問題。由於您正在談論 Wifi,因此可能是某些損壞的電子設備(微波爐、真空吸塵器等)造成的干擾,並且不僅會影響到該單個伺服器的 SSL 連接,還會影響其他連接,即至少使它們變慢或不可靠。當然,它也可能是網路中的攻擊者,Wifi 因某人傳輸大量數據(備份工作?)等而飽和。但我確信它與您的 nginx 設置無關。

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