丁寧な解説を書くのが面倒なので個人的メモ。
Apache2.4と言えばevent-mpmが目玉。しかしPHPを素直にmod_phpとして使おうとするとprefork-mpmになってしまい、event-mpmが使えず何だかもったいない。
Apache自体はeventで、PHPはPHP-FPMによるFastCGIで、と組み合わせる場合、mod_proxy_fcgiを使うと楽らしい。2.4から標準装備になっており、設定を有効にするだけで使える。
このページが詳しい。
PHP-FPM - Httpd Wiki http://wiki.apache.org/httpd/PHP-FPM
インストール手順は省略。
httpd.confでは、この2行のコメントアウトを外しておく。
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so
PHP-FPMはポート9000で起動しているものとすると、個別のサイト設定は↓こんな感じ。
<Macro VhostPHP $domain $droot>
<VirtualHost $domain:80>
ServerName $domain
DocumentRoot $droot
ProxyPassMatch \.(?:ico|png|gif|jpeg|jpg|css|js|html|php|json|xml)$ !
ProxyPassMatch ^(.*)$ fcgi://127.0.0.1:9000$droot/index.php$1
<Directory $droot>
Require all granted
</Directory>
</VirtualHost>
</Macro>
Macroはmod_macroをインストールしないと動かない部分なので、VirtualHostの中身をコピペして$XXXXを書き換える感じでも動く。
ProxyPassMatchで簡単な置き換えができるので、SymfonyやZend Frameworkのようなよくあるフロントコントローラーに直接リクエストを投げることができる。(上記の例ならmod_rewrite不要)
nginxを使う場合とそっくり?