- 黒の統一美 - Since 1998-06-22
FreeBSDで、Apache2.4.10+mpm-event+mod_proxy_fcgi+php56 php-fpmで四苦八苦したメモ。
ある日ふと思い立って、PHP5.6を使い始める。
PHP 5.6を入れるついでに、Apacheも2.4に上げよう。
Apache 2.4ならMPMもeventだな。
mod_php5は使えない事もないけど面倒だな…
よし、PHP-fpmにしよう。
と、色々調べると情報はいくつかあるのですが、一番多いのは、
<FilesMatch ".*\.php$">
ProxyPass fcgi://127.0.0.1:9000
</FilesMatch>
tという記述ばかりで、これだと色々と不具合があるんですよね。
先ず、正規表現が不味くてPATH_INFOを使うようなパターンが駄目。
PATH_INFOを使うような場合は、".*\.php(/.*)$"とするべし。
で、これでPATH_INFOが渡ったと思ったら、今度はSCRIPT_FILEがおかしかったり。なにやら色々バグなのか仕様なのか切り分けが大変そう。
もっと単純にお手軽に、なぜ、ハンドラとして出来ないノか…
そう思ってたら、ありました。
ソースとしては短いので試して見たら、
AddHandler "proxy:fcgi://127.0.01:9000/" .php
とすることで、いままでのPHPと同じ動作するようになりました。(AddHandlerは危険だから、FileMatchとSetHandlerを使え という意見もありますがそれは無視)
で、ここで終わりだったらいいんですが、更にオチがあり。
mod_proxyの英語版のマニュアルページを見ると(日本語訳ページはどうも2.2のmod_proxyの単純コピー臭い)
なんと、Apache2.4.10のmod_proxyには、このハンドラ定義が出来るようになってた訳です。mod_proxy_handlerさん短い付き合いでした…
mod_proxy_handler や mod_proxy の ハンドル化を通すと ProxyPass や ProxyPassMatch 等を通す時と異なり、PATH_INFOやSCRIPT_FILE等も正しく渡るようになります。
mod_proxy_fcgi+php-fpmの最大の欠点は、.htaccessにphp_value等を設定してた場合に、それが渡らない、mod_php5が無いならエラーになってしまう。という点ですかね。コレばっかりは仕方ない。