Nginx
Sinatra + Thin + Nginx connect() 在連接到上游時失敗(111:連接被拒絕)
我有一個在 Thin 上執行的 Sinatra 應用程序,使用 Nginx 作為反向代理並接收大量流量。我的使用者報告 502 錯誤並查看 Nginx 日誌,我看到了很多:
[warn] upstream server temporarily disabled while connecting to upstream [error] connect() failed (111: Connection refused) while connecting to upstream
如果我查看 Sinatra 應用程序的日誌,我看不到任何錯誤。
我正在使用以下內容啟動瘦伺服器:
--max-conns 15360 --max-persistent-conns 2048 --threaded start
我為 Ninx 設置了以下內容:
worker_processes auto; worker_rlimit_nofile 65535; events { worker_connections 15360; }
Sinatra 應用程序的主機文件:
server { server_name my_sinatra_app; #lots of bots try to find vulnerabilities in php sites location ~ \.php { return 404; } location / { proxy_pass http://localhost:6903; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection 'upgrade'; proxy_set_header Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_cache_bypass $http_upgrade; #increase buffers proxy_buffer_size 128k; proxy_buffers 4 256k; proxy_busy_buffers_size 256k; } listen 443 ssl; # managed by Certbot #... #SSL stuff }
為什麼會這樣?流量太大?
解決方案是什麼?我是否繼續增加
worker_connections
and--max-conns
直到錯誤停止?的輸出
htop
似乎伺服器可以處理更多:有什麼見解/建議嗎?
編輯
雖然我在 Sinatra 日誌或
systemctl status
輸出中沒有看到任何錯誤,但我確實注意到該服務從未執行很長時間,因此看起來瘦伺服器經常崩潰。知道如何進一步調試嗎?
所以問題實際上出在瘦伺服器上,由於某種原因,它每隔幾分鐘就會因 C++ 錯誤而崩潰,因此 Nginx 在嘗試連接到 Thin 並失敗時會拋出這些錯誤(因為 Thin 會崩潰/重新啟動)。
解決方案是用 Puma 代替 Thin,之後就沒有問題了。