Apache-2.2

Apache2 代理超時

  • October 6, 2020

我有 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 上執行)

我也嘗試過將TimeoutandProxyTimeout放入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 地址中找到的。

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