Posted at

ApacheでPHP-FPMを動かすなら、ProxyPassMatchではなくSetHandlerを使うのがいいらしい

More than 3 years have passed since last update.

タイトルの通り。

Apacheでmod_proxy_fcgiを使ってPHP-FPMを動かす場合、ProxyPassMatchを使う方法がある。


httpd.conf

ProxyPassMatch ^/(.*\.php(/.*)?)$ fcgi://127.0.0.1:9000/path/to/your/documentroot/$1


しかしこの設定ではDirectoryIndexが効かなかったりPATH_INFOがおかしかったりと、様々な問題がある。

Ubuntu 14.04 の Apache mod_proxy_fcgi で php 動かすのは厳しい話 - はざまブログによると、Apache 2.4.10以降では以下の書き方ができるようになった。


httpd.conf

DirectoryIndex index.php index.html

<FilesMatch \.php$>
SetHandler "proxy:fcgi://127.0.0.1:9000"
</FilesMatch>


ファイル名が.phpで終わる場合、127.0.0.1:9000で起動するFastCGI(=PHP-FPM)に処理を任せる、となる。わかりやすいし簡潔な設定になった。DirectoryIndexもきちんと効く。

Unixソケットを使っている場合は以下のようになる。


httpd.conf

<FilesMatch \.php$>

SetHandler "proxy:unix:/var/run/php-fpm/php-fpm.sock|fcgi://localhost"
</FilesMatch>

HerokuのApache設定でも同じような書き方がされている。


参考