WindowsのApacheでページが表示されなくなる不具合
今回はWindowsのApacheでページが表示されなくなってしまう原因の1つを紹介したいと思います。
■現象について
現象としては、1ページ目は正常に表示されるのに次ページは真っ白になってしまうというものです。
エラーは表示されず、Apacheのログにも何も出力されません。
■再現環境
現象が再現する環境は下記のようです。
サーバOS:Windows
Apacheのバージョン:2.4.X
ページにアクセスするブラウザ:Internet Explorer10、11(以降IE)
■解決方法
下記設定を書き加える事で現象は回避できると思います。
書き加える場所は「httpd.conf」の末尾か、「httpd-mpm.conf」がよいでしょう。
httpd-mpm.confに加える場合は「IfModule mpm_winnt_module」の下に追加するのがよいです。
AcceptFilter http none
AcceptFilter https none
■原因について
Apacheにはmpm_winntモジュールというものがあり、このモジュールがIEのHTTPリクエストを正常に処理できないのが原因だそうです。
mpm_winntはWindows NT用のマルチプロセッシングモジュールで、制御プロセスから子プロセスを制御する為のスレッドを起動するモジュールです。
AcceptFilterの設定はこのモジュールの動作を切り替える為の設定です。
余談ですが、AcceptFilterの設定にはhttpready、data、noneという指定があります。
httpreadyはHTTPリクエストのバッファリングをカーネルレベルで行う設定です。
中途半端なリクエストはApacheまで届かないので、リクエストを大量に送りつける一部の攻撃に対して対策の1つとして使えるようです。
dataはmpm_winntでデータを処理し、noneはそれを無効にする設定です。
■まとめ
今回のようにエラーが出ていないのに動きがおかしいというのは非常に困るものです。
問題が起きた時はどんな些細な事でもログに残そうと思わせる現象でした。
このような探しにくい情報はできるだけ分かりやすくまとめて発信していく予定です。
■参考サイト
Apache server 2.4.6 hangs after serving requests from Internet Explorer 10/11
mpm_winnt – Apache HTTP サーバ バージョン 2.4
core – Apache HTTP サーバ バージョン 2.4