Nginx

Sinatra + Thin + Nginx connect() 在連接到上游時失敗(111:連接被拒絕)

  • January 5, 2022

我有一個在 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_connectionsand--max-conns直到錯誤停止?

的輸出htop似乎伺服器可以處理更多:

htop

有什麼見解/建議嗎?

編輯

雖然我在 Sinatra 日誌或systemctl status輸出中沒有看到任何錯誤,但我確實注意到該服務從未執行很長時間,因此看起來瘦伺服器經常崩潰。知道如何進一步調試嗎?

所以問題實際上出在瘦伺服器上,由於某種原因,它每隔幾分鐘就會因 C++ 錯誤而崩潰,因此 Nginx 在嘗試連接到 Thin 並失敗時會拋出這些錯誤(因為 Thin 會崩潰/重新啟動)。

解決方案是用 Puma 代替 Thin,之後就沒有問題了。

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