Apache-2.2
Apache2 代理超時
我有 Apache2 和 PHP + PHP-FPM 根據以下配置:
http://wiki.apache.org/httpd/PHP-FPM
我正在編寫一個腳本,該腳本需要很長時間才能在內部 Vhost 上執行,但會一直超時,如果腳本在 30 秒內執行,一切都會完美執行。
我的 apache 日誌告訴我:
[Wed Apr 17 21:57:23.075175 2013] [proxy_fcgi:error] [pid 9263:tid 140530454267648] (70007)The timeout specified has expired: [client 58.169.202.172:49017] AH01075: Error dispatching request to :, referer:
當嘗試執行腳本時,我會
503 Service Unavailable
在 30 秒的執行時間後得到一個。從邏輯上講,這意味著我有一個超時指令或設置為 30 秒,但我在 Vhost 的配置中有這些:Timeout 600 <IfModule proxy_module> ProxyPassMatch ^/(.*\.php)$ fcgi://127.0.0.1:9001/home/pyrokinetiq/scripts/$1 timeout=600 ProxyTimeout 600 </IfModule>
(對我來說,php-fpm 在埠 9001 上執行)
我也嘗試過將
Timeout
andProxyTimeout
放入httpd.conf
其中,沒有任何區別。似乎在某處特定於 的另一個超時設置
mod_proxy_fcgi
,但我找不到它。我從官方 tarball 安裝了 Apache2 httpd,似乎沒有一個 mod 帶有任何配置文件。如果有人能指出我正確的方向,將不勝感激。
在測試了幾個配置參數後,我終於解決了這個問題。我對該解決方案進行了兩次測試,刪除了所有以前的更改。我只需要一個參數來修復它。
對於最新版本的 httpd 和 mod_proxy_fcgi,您可以簡單地添加
timeout=
到ProxyPassMatch
行尾,例如:ProxyPassMatch ^/(.+\.php.*)$ fcgi://127.0.0.1:9000/<docroot>/$1 timeout=1800
對於舊版本,它有點複雜,例如:
<Proxy fcgi://127.0.0.1:9000> ProxySet timeout=1800 </Proxy> ProxyPassMatch ^/(.+\.php.*)$ fcgi://127.0.0.1:9000/<docroot>/$1
我需要添加代理指令以將超時設置為 30 分鐘。在某些應用程序中,通常在操作數據庫時,有可能需要 10 分鐘以上才能執行的常式。我暫時將超時設置為 30 分鐘以確保他們完成。在使用安裝嚮導時特別有用,這需要太多時間(以我的拙見)。
順便說一下,幫助我解決這個問題的初始輸入是在以下URL 地址中找到的。