Apache-2.2
即使在代理服務備份後,mod_proxy 也會返回 503 錯誤
我有一個使用 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
連接池工作程序重試超時(以秒為單位)。如果後端伺服器的連接池工作程序處於錯誤狀態,則 Apache 不會將任何請求轉發到該伺服器,直到超時到期。這可以關閉後端伺服器進行維護,並在稍後將其重新聯機。值 0 意味著總是在沒有超時的情況下重試處於錯誤狀態的工作人員。
您是否遵循記錄的重啟 gunicorn 的方法?
我會推荐一個簡單的方法。如果在您的環境中 2-5 秒的停機時間是可以接受的,那麼我是否建議簡單地編寫 Apache 服務腳本以在您重新啟動 gunicorn 服務後立即重新啟動?
在生產環境中,我建議使用 HAProxy 而不是 Apache 作為您的前端,您可能會有更好的運氣。