Apache-2.2

即使在代理服務備份後,mod_proxy 也會返回 503 錯誤

  • January 2, 2013

我有一個使用 Apache2 作為前端伺服器的設置,用於由gunicorn提供的多個 python 應用程序。我使用 mod_proxy 的 Apache2 設置如下所示:

<VirtualHost *:80>
   ServerName example.com
   UseCanonicalName On
   ServerAdmin webmaster@localhost

   LogLevel warn
   CustomLog /var/log/apache2/example.com/access.log combined
   ErrorLog /var/log/apache2/example.com/error.log
   ServerSignature On

   Alias /media/ /home/example/example.com/pysrc/project/media/

   ProxyPass /media/ !
   ProxyPass / http://127.0.0.1:4711/
   ProxyPassReverse / http://127.0.0.1:4711/
   ProxyPreserveHost On
   ProxyErrorOverride Off
</VirtualHost>

通常,此設置執行良好。但是我有一個問題:當我重新啟動 gunicorn 程序(需要 2-5 秒)並且有來自 Apache 的請求時,該請求將失敗並出現 503 錯誤。到現在為止還挺好。但是 Apache 不斷返回 503 錯誤,即使在 gunicorn 程序備份之後也是如此。只有在完全重新啟動 Apache 後,它才會從代理伺服器恢復提供內容。

有沒有辦法解決這種行為?

添加retry=0到您的 ProxyPass 行:

ProxyPass / http://127.0.0.1:4711/ retry=0

mod_proxy 文件

連接池工作程序重試超時(以秒為單位)。如果後端伺服器的連接池工作程序處於錯誤狀態,則 Apache 不會將任何請求轉發到該伺服器,直到超時到期。這可以關閉後端伺服器進行維護,並在稍後將其重新聯機。值 0 意味著總是在沒有超時的情況下重試處於錯誤狀態的工作人員。

您是否遵循記錄的重啟 gunicorn 的方法?

我會推荐一個簡單的方法。如果在您的環境中 2-5 秒的停機時間是可以接受的,那麼我是否建議簡單地編寫 Apache 服務腳本以在您重新啟動 gunicorn 服務後立即重新啟動?

在生產環境中,我建議使用 HAProxy 而不是 Apache 作為您的前端,您可能會有更好的運氣。

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