そのため、PHP-FPMを使用してApache2.4サーバーでタイムアウトが発生し続ける理由を探しています。エラーは次のとおりです。
[proxy_fcgi:error] [pid ###] (70007)The timeout
specified has expired:[client XXXXXXXX] AH01075 :
Error dispatching request to:, referer: http://address
次の設定ファイルでは、表示されているすべてのタイムアウトでプレイしました。私はfpmに2つのプールを持っています:
[www]
;user and group info and listening ip and such up here
access_log = /path/to/access.log
request_terminate_timeout = 15
php_admin_value[error_log] = /path/to/error.log
php_admin_flag[log_errors] = on
そして2番目:
[app]
;user and group info and listening ip and such up here
access_log = /path/to/access.log
request_terminate_timeout = 300
php_admin_value[error_log] = /path/to/error.log
php_admin_flag[log_errors] = on
と私のphp.ini:
max_execution_time = 300
max_input_time = 300
default_socket_timeout = 300
それで私のApache設定:
Timeout 80
<FilesMatch "^(some | names | of | files)\.php$">
SetHandler "proxy:fcgi://123.45.5.67:7891"
</FilesMatch>
<FilesMatch "^!(some | names | of | files)\.php$">
SetHandler "proxy:fcgi://123.45.5.67:5432"
</FilesMatch>
明らかに、httpd.confにはさらに多くのものがありますが、タイムアウトは指定されていません(300秒に設定された無関係のProxyPassを除く)。私はこのスレッドを読みました: https://unix.stackexchange.com/questions/270655/how-to-find-and-edit-Apache-timeout 、しかし私はrpm -q --changelog httpd | less
でパッチをチェックしました、そしてそのバグに対するパッチがあります。プールが1つしかない場合、タイムアウトもはるかに混乱していました。 24秒から6.7分までのどこでも(5Kb/sで、アップロード速度が制限されました。コードには問題がなく、意図的にテストされていました)。しばらくの間、それはrequest_terminate_timeout
と相関しているように見えましたが、その相関関係はなくなりました。
助けてくれてありがとう。
それで、それはスロットル速度と関係があることがわかりました。リクエスト数が少なかったため、リクエストがタイムアウトしました。 RequestReadTimeoutを変更して修正しました。
RequestReadTimeout header=20-120,MinRate=50 body=20,MinRate=50
これは、ユーザーからのトラフィックがサーバーに到達する前にプロキシまたはファイアウォールを通過している場合にも役立ちます。リクエストとデータの間の時間は重要な場合があります。