PHP+Apacheを使用したWebシステムの開発を行う際、既存のサーバーによってPHPとApacheのバージョンが指定されていることがあります。
開発用のPCがWindowsの場合はApacheのサービスを登録する際の-Dオプションでサービスごとの定数を設定することで、httpd.confなどの設定ファイル内でif分岐による設定の切り分けを行うことが可能です。
今回はApache2.2+PHPなし(ajp連携による8009ポートへのリクエスト転送)、Apache2.2+PHP5.3、Apache2.4+PHP5.6をそれぞれ起動できるような手順についてまとめます。
Apache2.2+PHPなし(ajp連携による8009ポートへのリクエスト転送)
Linuxの本番環境でTomcatを使用したアプリケーションを動作させるときに良く使う設定です。
定数名はWithoutPHPとします。
# Apache2.2のbinディレクトリまで移動 cd /D "C:\Program Files (x86)\Apache Software Foundation\Apache2.2\bin" # サービス登録 httpd.exe -k install -n "Apache2.2 Without PHP" -D WithoutPHP
Apache2.2+PHP5.3
定数名はPHP5_3とします。
# Apache2.2のbinディレクトリまで移動 cd /D "C:\Program Files (x86)\Apache Software Foundation\Apache2.2\bin" # サービス登録 httpd.exe -k install -n "Apache2.2 with PHP5.3" -D PHP5_3
Apache2.4+PHP5.6
定数名はPHP5_6とします。
※Apache2.4をCドライブの直下にインストールしているため通常とパスが異なります
# Apache2.4のbinディレクトリまで移動 cd /D "C:\Apache24\bin" # サービス登録 httpd.exe -k install -n "Apache2.4 with PHP5.6" -D PHP5_6
ここまで実行した状態でApacheMonitorを確認すると以下のような表示になると思います。
上記のコマンドによって登録したApacheのサービスは自動起動がデフォルトで有効となっているので手動開始に変更しておきます。
↓
↓
次にhttpdの設定ファイルを編集します。
Apache2.2のhttpd.confを開き「Apache2.2+PHPなし」のサービスを起動したときにajpのモジュールを読み込むよう設定します。(110行目あたり)
-#LoadModule proxy_module modules/mod_proxy.so -#LoadModule proxy_ajp_module modules/mod_proxy_ajp.so +<IfDefine WithoutPHP> +LoadModule proxy_module modules/mod_proxy.so +LoadModule proxy_ajp_module modules/mod_proxy_ajp.so +</IfDefine>
# ajpモジュールによるリクエストの転送設定(末尾の辺りに記載) +<IfDefine WithoutPHP> +ProxyPass / ajp://localhost:8009/ +</IfDefine>
Apache2.2のhttpd-vhosts.confを開き「Apache2.2+PHP5.3」のアプリケーションのVurtualHost設定を囲む形でIfDefine句を追記します。
+<IfDefine PHP5_3> #ちょっとした試験用 <VirtualHost *:80> ServerName local.php-test.com DocumentRoot "E:/workspace/php_test" ErrorLog logs/php_test_error_log TransferLog logs/php_test_access_log <Directory "E:/workspace/php_test"> Options FollowSymLinks AllowOverride All </Directory> </VirtualHost> +</IfDefine>
Apache2.4のhttpd-vhosts.confを開き「Apache2.4+PHP5.6」のアプリケーションのVurtualHost設定を囲む形でIfDefine句を追記します。
+<IfDefine PHP5_6> # md5reverse <VirtualHost *:80> DocumentRoot "E:/workspace4.6/md5reverse/cake/webroot" ServerName local.md5reverse.com ErrorLog "logs/md5reverse.error.log" CustomLog "logs/md5reverse.access.log" common <Directory "E:/workspace4.6/md5reverse/cake/webroot"> Options -Indexes +ExecCGI +MultiViews +FollowSymLinks AllowOverride All Require all granted </Directory> </VirtualHost> <VirtualHost *:443> DocumentRoot "E:/workspace4.6/md5reverse/cake/webroot" ServerName local.md5reverse.com ErrorLog "logs/md5reverse.error.log" CustomLog "logs/md5reverse.access.log" common SSLEngine on SSLCertificateFile conf/server.crt SSLCertificateKeyFile conf/server.key <Directory "E:/workspace4.6/md5reverse/cake/webroot"> Options -Indexes +ExecCGI +MultiViews +FollowSymLinks AllowOverride All Require all granted </Directory> </VirtualHost> +</IfDefine>
最後にApacheMonitorから起動したいサービスを選択してStartをクリックすることで任意の設定によるApacheの起動が行えることが確認できれば設定は以上となります。