
接続元IPアドレスを見てPHPバージョンを切り替えたい
こんにちは、Qです。
バージョンが異なる複数の PHP/PHP-FPM をインストールするケースは多々ありますが、
今回は接続元のIPアドレスを見て PHP を切り替える方法のご紹介です。
■環境
AlmaLinux release 10.1
Apache/2.4.63 (appstream)
PHP 8.3.26 (appstream)
PHP 8.4.17 (remi-safe)
PHP 8.5.2 (remi-safe)
手順は割愛しますが PHP 8.3 はOS標準リポジトリから、
PHP8.4、PHP8.5 は remi-safe リポジトリからインストールします。
Apache インクルード用ファイルをリネームします。
/etc/httpd/conf.d/php.conf
/etc/httpd/conf.d/php84-php.conf ⇒ /etc/httpd/conf.d/php84-php.conf.org
/etc/httpd/conf.d/php85-php.conf ⇒ /etc/httpd/conf.d/php85-php.conf.org
Apache 再起動
# systemctl restart httpd
psコマンドを叩くと php-fpm が起動しているはずです。
# ps aux | grep root.*[p]hp
root ・・・・・ php-fpm: master process (/etc/php-fpm.conf)
root ・・・・・ php-fpm: master process (/etc/opt/remi/php84/php-fpm.conf)
root ・・・・・ php-fpm: master process (/etc/opt/remi/php85/php-fpm.conf)
さて本題です。
同一ドキュメントルート配下で、以下のように 接続元IPアドレスに応じて
PHPバージョン を切り替えたい 。。。
① 接続元 172.16.0.1 PHP 8.4
② 接続元 192.168.0.1 PHP 8.5
③ 接続元 その他大勢 PHP 8.3
バーチャルホストの <Directory> ...</Directory> の中で
<If “-R ‘IP Address'”> ...</If> を使って接続元IPアドレスを判定し、
SetHandler で PHP を切り替えることができます。
<VirtualHost *:80>
ServerName www.example.com
DocumentRoot "/var/www/vhosts/htdocs"
<Directory "/var/www/vhosts/htdocs" >
Options FollowSymLinks ExecCGI
AllowOverride All
Require all granted
<FilesMatch \.php$>
<If "-R '172.16.0.1'">
SetHandler "proxy:unix:/var/opt/remi/php84/run/php-fpm/www.sock|fcgi://localhost"
</If>
<If "-R '192.168.0.1'">
SetHandler "proxy:unix:/var/opt/remi/php85/run/php-fpm/www.sock|fcgi://localhost"
</If>
</FilesMatch>
</Directory>
ErrorLog logs/www.example.com.error_log
CustomLog logs/www.example.com.access_log combined
</VirtualHost>
複数のIPアドレスを指定したいときはこんな感じです。
<If "-R 'xxx.xxx.xxx.xxx' || -R 'yyy.yyy.yyy.yyy' || -R 'zzz.zzz.zzz.zzz'">
活躍する場面は多くないと思いますが、PHPバージョン間の互換性を確認したいときなどに
重宝するのかな、と。
今回は以上です。
それでは。





