0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Monterey付属のhttpdで、phpのバージョンを仮想ホストごとに設定する

Last updated at Posted at 2022-04-22

ことの発端

これまで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関係の設定は一応全てコメントアウトしています)。

httpd-vhosts.conf
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を使う需要がどれだけあるかワカランのですが、あまり色々インストールしなくて済むのと、コンフィグもそれほど多くないので暫くこれでいきたいと思っております。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?