ApacheでのFastCGIによるInternal Server Error


突然のInternal Server Error

Webシステムで長時間処理を行っていた際、なぜか唐突にリクエストが中断され、Internal Server Errorとなった。
サーバー環境としては、以下の通り。

  • Windows Server
  • Apache2.4
  • PHP7
  • FastCGI

メモリ上限

タイムアウトにしては設定時間前にエラーが返ってきている。かなり重めの処理を行っているので、メモリの使用上限をphp.ini上で解除して再度実行してみたけれど、状況変わらず。

ログ

何かそれらしい情報がないかと思って探ってみるも、全くエラーの情報が出力されておらず。

mpm_winnt

設定ファイルを読み込むようにしてみたのだけれど、結果変わらず。

httpd.conf

設定ファイルの見直し。タイムアウトの設定は十分だし、リクエストの問題でもない。

<IfModule fcgid_module>
   FcgidInitialEnv PHPRC "c:/php"
   FcgidInitialEnv PHP_FCGI_MAX_REQUESTS 0
   FcgidMaxRequestLen 30000000
   FcgidIOTimeout 1800
   FcgidConnectTimeout 1800
</IfModule>

公式のドキュメントを見てみると、それらしき設定を発見。
https://httpd.apache.org/mod_fcgid/mod/mod_fcgid.html#fcgidbusytimeout
確かに時間的にもデフォルトの時間でエラーとなっているっぽいし、重めの処理だから中断されてしまったのかもしれない。そもそもの作りがよくないのだとも言えるけれど。

早速追加して再度実行してみるとエラーは回避された。
最終的に以下のように。

<IfModule fcgid_module>
   FcgidInitialEnv PHPRC "c:/php"
   FcgidInitialEnv PHP_FCGI_MAX_REQUESTS 0
   FcgidMaxRequestLen 30000000
   FcgidIOTimeout 1800
   FcgidConnectTimeout 1800
   FcgidBusyTimeout 1800
</IfModule>