ことの発端
これまでwindowsのIIS上で、仮想ホストごとに違うバージョンのphpを動かしていました。開発マシンをmacにしたので、こちらでも同じことができないか調べてみました。Montereyはphpが同梱されていないのでbrewで入れることになりますが、brewで入れたphpには署名がされていないためか、付属のhttpdにphpモジュールを組み込むところで弾かれてしまいます。
そこでメモリに組み込むモジュールではなく、TCP/IP経由で処理を投げるphp-fpmを使ってみることにしました。あちこち参考にさせて頂き試したところ、下記の方法でできたので記録として残したいと思います。
php-fpmの設定
brewで入れたphpにはphp実行サーバとでも言うべきphp-fpmが同梱されており、例えば
brew install php@7.4
で入れた場合、
brew services start php@7.4 (停止はstop)
のコマンドで7.4のphp-fpmがポート9000で起動されます。ちなみに9000は昔はxdebugのデフォルトポートだったので、よくデバッガと干渉します。
ポートは下記のphp-fpm設定ファイル36行名あたりでliste=9000と定義されています。
/usr/local/etc/php/7.4/php-fpm.d/www.conf
そこでこれを9074などに修正し、php@7.4のphp-fpmをポート9074で起動します。
brew services start php@7.4
狙ったポートが待ち受けになっているかは下記で確認します。
lsof -i:9074
apache2の環境把握
macに付属のhttpdは
実体 /usr/sbin/httpd
設定 /etc/apache2/httpd.cnof
コマンド /usr/sbin/apachectl
にあります。which httpd 等で確認します。
httpd.confの設定
/etc/apache2/httpd.confの113行あたり
LoadModule proxy_module libexec/apache2/mod_proxy.so
141行目あたり
LoadModule proxy_fcgi_module libexec/apache2/mod_proxy_fcgi.so
のコメントを外して有効にします。モジュールが組み込まれているかはhttpd -M で確認できます。
また528行目付近にあるバーチャルホストの設定ファイルを読み込めるようにします。
Include /private/etc/apache2/extra/httpd-vhosts.conf
httpd-vhosts.confの設定
httpd.confから読み込まれるhttpd-vhosts.confに、仮想ホストと処理するphpを記述します(ここでは省略していますが、port80関係の設定は一応全てコメントアウトしています)。
Listen 8080
Define DOCROOT01 "/Users/xxxx/proj/WebPages/VirtualHostTest"
<VirtualHost *:8080>
ServerName any
DocumentRoot ${DOCROOT}
<Directory ${DOCROOT}>
AddType application/x-httpd-php .php #.phpを扱えるようにする。
Require all granted
<FilesMatch \.php$>
SetHandler "proxy:fcgi://127.0.0.1:9074/" #phpならphp@7.4のサーバに投げる
</FilesMatch>
</Directory>
</VirtualHost>
書き換えたら
sudo apachectl configtest
でコンフィグを確認して、Syntax OKなら
sudo apachectl start
で起動します。これで
/Users/xxxx/proj/WebPages/VirtualHostTest/info.php
のファイルが
http;//localhost:8080/info.php
のURLでphp@7.4処理できるようになりました。
フォルダとphp-fpmのポートの組み合わせを変えることで、ポートごとに処理させるphpを変えることができます。
謎な点
/Users/xxxx/Documentsをルートに指定するとForbittenで弾かれてしまいます。ログには
AH00132: file permissions deny server access: /Users/xxx/Documents/index.html
と出ています。Documentsのパーミッションを755にしてもダメだが、/User/xxxx/PhpstormProjectsの下とかだとOKで、原因がよくわからんです。
感想とか
dockerとか全盛のいまどき、ビルトインのapahce2を使う需要がどれだけあるかワカランのですが、あまり色々インストールしなくて済むのと、コンフィグもそれほど多くないので暫くこれでいきたいと思っております。