ApacheでPHPを動作させるには、PHPモジュール(mod_php)をApacheに組み込む必要があります。mod_phpは、ApacheサーバーがPHPスクリプトを直接処理できるようにするモジュールで、PHPアプリケーションの高速化や効率的な実行を実現します。
本記事では、Linux(UbuntuやCentOS)およびWindows環境でmod_phpをインストールし、Apacheで有効にする手順を詳しく解説します。加えて、Apache設定ファイルの編集方法や、VirtualHostでのPHP設定、トラブルシューティングまで網羅しています。初心者でも迷わずに設定できるよう、具体的なコマンド例や設定例を交えながら説明します。
ApacheとPHPの連携環境を構築し、動作確認やセキュリティ設定までしっかり行うことで、安定したWebサーバーの運用が可能になります。
ApacheとPHPの概要
Apacheは、世界中で最も広く利用されているWebサーバーソフトウェアです。オープンソースで提供されており、高い拡張性と柔軟性を持つため、小規模なサイトから大規模なサービスまで幅広く対応可能です。
PHPは、動的なWebページを生成するためのサーバーサイドのスクリプト言語で、WordPressやDrupalなど多くのCMSで利用されています。ApacheとPHPを連携させることで、PHPスクリプトをWeb経由で実行できる環境が整います。
mod_phpとは
mod_phpは、Apacheのモジュールとして動作するPHPインタプリタです。ApacheがHTTPリクエストを受け取ると、PHPスクリプトをmod_phpが直接処理し、HTMLとしてブラウザに返します。これにより、PHPスクリプトが高速に実行されます。
mod_phpの特徴
- 高速な処理:PHPスクリプトがApacheプロセス内で実行されるため、CGI方式よりも高速です。
- シンプルな設定:Apacheの設定ファイルを少し編集するだけでPHPが動作します。
- 広範なサポート:多くのLinuxディストリビューションやWindows環境で標準的に提供されています。
PHPの処理方式の比較
ApacheでPHPを実行する方式は複数存在しますが、以下の3つが代表的です。
1. mod_php
Apache内で直接PHPスクリプトを処理します。処理速度が速く、設定も簡単です。
2. CGI (Common Gateway Interface)
外部プログラムとしてPHPを実行します。mod_phpより速度が劣りますが、セキュリティ面では有利です。
3. PHP-FPM (FastCGI Process Manager)
FastCGIを利用し、PHPのプロセスを管理します。高トラフィック環境でのスケーラビリティに優れています。
このように、ApacheとPHPの組み合わせはWeb開発において重要な役割を果たします。次のセクションでは、mod_phpのインストール方法を詳しく解説します。
mod_phpのインストールと確認方法
ApacheでPHPを動作させるためには、mod_phpモジュールをインストールし、有効化する必要があります。以下では、Linux(UbuntuおよびCentOS)とWindows環境でのインストール手順を詳しく説明します。
Linux環境でのインストール
Ubuntu/Debian系
- パッケージリストを更新します。
sudo apt update
- mod_phpをインストールします。
sudo apt install php libapache2-mod-php
- Apacheを再起動して、mod_phpを有効化します。
sudo systemctl restart apache2
- インストールが完了したかを確認します。
php -v
CentOS/RHEL系
- EPELリポジトリを追加します。
sudo yum install epel-release
- mod_phpをインストールします。
sudo yum install php php-cli php-common
- Apacheを再起動して変更を反映します。
sudo systemctl restart httpd
- インストールが完了したかを確認します。
php -v
Windows環境でのインストール
- PHP公式サイトからPHPのWindows版をダウンロードします。
- ダウンロードしたZIPファイルを展開し、C:\php などのディレクトリに配置します。
- Apacheのhttpd.confファイルを編集し、以下を追加します。
LoadModule php_module "C:/php/php8apache2_4.dll"
AddHandler application/x-httpd-php .php
PHPIniDir "C:/php"
- Apacheを再起動して設定を反映します。
インストール後の確認
インストール後、ApacheがPHPを正しく認識しているか確認します。
- Apacheのドキュメントルート(例: /var/www/html)に以下の内容でphpinfo.phpファイルを作成します。
<?php
phpinfo();
?>
- ブラウザで「http://サーバーアドレス/phpinfo.php」にアクセスし、PHP情報が表示されれば成功です。
次は、Apache設定ファイルの編集方法について解説します。
Apache設定ファイルの編集
ApacheでPHPモジュール(mod_php)を有効にするためには、Apacheの設定ファイルを編集して、PHPモジュールを適切にロードする必要があります。このセクションでは、Linux(Ubuntu/CentOS)およびWindows環境での設定方法を解説します。
httpd.confの編集
Apacheのメイン設定ファイルであるhttpd.conf
にmod_phpをロードする設定を追加します。
Ubuntu/Debian系
- Apacheのモジュールを有効化します。
sudo a2enmod php
- Apacheを再起動して変更を反映します。
sudo systemctl restart apache2
- 設定ファイルが正しく記述されているか確認します。
sudo apachectl configtest
「Syntax OK」と表示されれば問題ありません。
CentOS/RHEL系
httpd.conf
ファイルを開きます。
sudo vi /etc/httpd/conf/httpd.conf
- 以下の行がコメントアウトされている場合は、コメントを解除します。
LoadModule php_module modules/libphp.so
AddType application/x-httpd-php .php
DirectoryIndex index.php index.html
- 保存してApacheを再起動します。
sudo systemctl restart httpd
Windows環境
- Apacheの
httpd.conf
を開きます。(例:C:\Apache24\conf\httpd.conf
) - 以下の行を追加または編集します。
LoadModule php_module "C:/php/php8apache2_4.dll"
AddHandler application/x-httpd-php .php
PHPIniDir "C:/php"
- Apacheを再起動します。
httpd -k restart
PHPの動作確認
- ドキュメントルート(例:
/var/www/html
)にindex.php
を作成します。
<?php
echo "PHP is working!";
?>
- ブラウザで「http://サーバーアドレス/index.php」にアクセスし、「PHP is working!」と表示されれば設定は完了です。
これでApacheの設定ファイルが適切に編集され、PHPが動作する環境が整いました。次はVirtualHostでのPHP有効化方法について解説します。
VirtualHostでのPHP有効化設定
VirtualHostを利用することで、Apache上で複数のWebサイトを同時に運用し、それぞれに異なるPHP設定を適用することができます。このセクションでは、VirtualHost環境でPHP(mod_php)を有効化する手順を解説します。
VirtualHostとは
VirtualHostは、1台のサーバーで複数のドメインやサイトを管理するためのApacheの機能です。ドメインごとに異なるディレクトリや設定を割り当てることができます。
VirtualHostの設定方法
Ubuntu/Debian系
- VirtualHostの設定ファイルを作成します。
sudo nano /etc/apache2/sites-available/example.com.conf
- 以下のようにVirtualHostを設定します。
<VirtualHost *:80>
ServerAdmin admin@example.com
ServerName example.com
DocumentRoot /var/www/example.com
DirectoryIndex index.php index.html
<Directory /var/www/example.com>
AllowOverride All
Require all granted
</Directory>
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
- 設定を有効化します。
sudo a2ensite example.com.conf
sudo systemctl reload apache2
CentOS/RHEL系
- VirtualHostの設定ファイルを作成します。
sudo vi /etc/httpd/conf.d/example.com.conf
- 以下の内容を追加します。
<VirtualHost *:80>
ServerAdmin admin@example.com
DocumentRoot /var/www/example.com
ServerName example.com
DirectoryIndex index.php index.html
<Directory /var/www/example.com>
AllowOverride All
Require all granted
</Directory>
ErrorLog /var/log/httpd/example.com_error.log
CustomLog /var/log/httpd/example.com_access.log combined
</VirtualHost>
- Apacheを再起動して設定を反映します。
sudo systemctl restart httpd
VirtualHostごとのPHP設定
VirtualHost単位でPHPのバージョンや設定を変更したい場合、以下のようにPHP設定を記述します。
<FilesMatch \.php$>
SetHandler application/x-httpd-php
</FilesMatch>
php_value upload_max_filesize 32M
php_value post_max_size 32M
php_value memory_limit 128M
動作確認
- VirtualHostのドキュメントルートにPHPテストファイルを作成します。
sudo mkdir -p /var/www/example.com
sudo nano /var/www/example.com/index.php
- 以下のコードを記述します。
<?php
phpinfo();
?>
- 「http://example.com」にアクセスし、PHPの設定情報が表示されれば成功です。
VirtualHostでPHPを有効化することで、複数サイトの管理が容易になります。次は、PHPが正常に動作しているか確認する方法について解説します。
PHP情報の確認方法
Apacheにmod_phpを導入した後は、PHPが正しく動作しているかを確認する必要があります。phpinfo()関数を使用することで、PHPのバージョンや設定、ロードされているモジュールなどを簡単に確認できます。
phpinfo()を使った確認方法
- Apacheのドキュメントルート(例:
/var/www/html
)にPHPテストファイルを作成します。
sudo nano /var/www/html/phpinfo.php
- 以下のコードを記述します。
<?php
phpinfo();
?>
- ファイルを保存して、ブラウザで以下のURLにアクセスします。
http://サーバーのIPアドレス/phpinfo.php
- PHPの情報が表示されれば、mod_phpが正常に動作しています。
phpinfo()の出力例
phpinfo()関数を実行すると、以下のような情報が表示されます。
- PHPバージョン:現在インストールされているPHPのバージョン
- ロードされているモジュール:mod_phpや各種拡張モジュール
- 設定ファイル (php.ini) のパス:PHPの設定ファイルが存在するディレクトリ
- ディレクティブの設定値:post_max_size、upload_max_filesizeなどの設定値
表示されない場合の対処法
phpinfo()が表示されない場合は、以下の点を確認してください。
1. Apacheのエラーログを確認
エラーログで原因を特定します。
sudo tail -f /var/log/apache2/error.log # Ubuntu/Debian系
sudo tail -f /var/log/httpd/error_log # CentOS/RHEL系
2. PHPモジュールがロードされているか確認
php -m | grep php
「php」が表示されない場合は、mod_phpがインストールされていません。インストール手順を再度確認してください。
3. 設定ファイルの記述ミスを確認
Apacheの設定ファイル(httpd.conf)やVirtualHostの設定ファイルで、PHPのハンドラが正しく記述されているか確認します。
AddHandler application/x-httpd-php .php
phpinfo.phpの削除
セキュリティ上、phpinfo.phpは公開したままにしないようにしましょう。動作確認が終わったら、以下のコマンドで削除します。
sudo rm /var/www/html/phpinfo.php
これでPHPの動作確認が完了しました。次はmod_phpのバージョン管理と更新方法について解説します。
mod_phpのバージョン管理と更新方法
PHPは頻繁にアップデートが行われ、セキュリティの脆弱性修正や新機能が追加されます。mod_phpを最新の状態に保つことで、安全で安定したWebサーバー運用が可能になります。このセクションでは、mod_phpのバージョン確認方法と更新手順を解説します。
mod_phpのバージョン確認方法
- ターミナルまたはコマンドプロンプトで以下のコマンドを実行します。
php -v
出力例:
PHP 8.1.10 (cli) (built: Aug 30 2023 10:15:00)
Copyright (c) The PHP Group
Zend Engine v4.1.10, Copyright (c) Zend Technologies
「PHP 8.1.10」という部分が現在のPHPのバージョンです。
Apache経由でのバージョン確認
phpinfo()を使うことで、Apacheが使用しているPHPバージョンを確認できます。
- ドキュメントルートにphpinfo.phpを作成し、ブラウザでアクセスします。
<?php
phpinfo();
?>
「PHP Version」の欄に、現在のmod_phpのバージョンが表示されます。
mod_phpの更新方法
Ubuntu/Debian系
- パッケージリストを更新します。
sudo apt update
- PHPのアップデートを行います。
sudo apt upgrade php libapache2-mod-php
- Apacheを再起動して更新を反映します。
sudo systemctl restart apache2
- バージョンが更新されたか確認します。
php -v
CentOS/RHEL系
- 現在のリポジトリで利用可能なPHPのバージョンを確認します。
yum list php
- PHPをアップデートします。
sudo yum update php php-cli php-common
- Apacheを再起動して更新を反映します。
sudo systemctl restart httpd
Windows環境
- PHP公式サイトから最新バージョンをダウンロードします。
- ダウンロードしたZIPファイルを展開し、現在のPHPディレクトリと置き換えます。
httpd.conf
の設定が正しいか確認し、Apacheを再起動します。
httpd -k restart
複数のPHPバージョンを切り替える方法
複数のPHPバージョンをインストールし、サイトごとに異なるPHPバージョンを使用することが可能です。
Ubuntu/Debian系
- 利用可能なPHPバージョンを一覧表示します。
sudo update-alternatives --config php
- 使用するバージョンを選択します。
CentOS/RHEL系
- Remiリポジトリを利用して複数バージョンをインストールします。
sudo yum install php74 php81
- 使用するバージョンを切り替えます。
sudo alternatives --config php
更新後の確認
バージョン更新後は、必ずApacheとPHPの動作確認を行います。phpinfo()やPHPスクリプトが問題なく動作しているかを確認してください。
次は、mod_phpのセキュリティ設定と最適化について解説します。
セキュリティ設定と最適化
mod_phpを使用するApache環境では、セキュリティ対策とパフォーマンス最適化が重要です。PHPの設定を適切に行わないと、脆弱性が発生し、攻撃を受けるリスクが高まります。このセクションでは、セキュリティを強化し、サーバーの負荷を軽減する方法を解説します。
1. php.iniのセキュリティ設定
php.ini
はPHPの設定ファイルで、セキュリティやパフォーマンスを制御します。
1-1. 不要な情報を非表示にする
PHPのエラーやバージョン情報が外部に表示されると、攻撃者にヒントを与える可能性があります。
expose_php = Off
display_errors = Off
log_errors = On
error_log = /var/log/php_errors.log
解説:
expose_php
をOff
にすることで、HTTPヘッダーにPHPのバージョンが表示されなくなります。display_errors
をOff
にすることで、エラーがブラウザに直接表示されなくなり、log_errors
でエラーログに記録されます。
1-2. ファイルアップロードの制限
アップロード可能なファイルサイズや、アップロードディレクトリを制限して、攻撃を防ぎます。
file_uploads = On
upload_max_filesize = 8M
post_max_size = 8M
解説:
upload_max_filesize
でアップロード可能なファイルサイズを制限します。post_max_size
でPOSTリクエスト全体のサイズを制限します。
1-3. 不要な関数の無効化
外部からシステムコマンドを実行できる関数を無効化します。
disable_functions = exec,passthru,shell_exec,system,proc_open,popen,curl_exec
解説:
これにより、PHP経由で任意のコマンドが実行されるリスクを軽減します。
2. Apacheのセキュリティ設定
2-1. .htaccessでの制限
ディレクトリ内のPHPファイルを外部から直接アクセスできないように制限します。
<FilesMatch "\.php$">
Order Deny,Allow
Deny from all
</FilesMatch>
2-2. ディレクトリ一覧の無効化
ディレクトリ内のファイル一覧が表示されるのを防ぎます。
Options -Indexes
2-3. HTTPSの強制
HTTPでのアクセスをHTTPSにリダイレクトします。
<VirtualHost *:80>
ServerName example.com
Redirect permanent / https://example.com/
</VirtualHost>
3. mod_phpのパフォーマンス最適化
3-1. OPCacheの有効化
OPCacheを有効にすることで、PHPスクリプトのコンパイル結果をキャッシュし、処理速度を向上させます。
opcache.enable = 1
opcache.memory_consumption = 128
opcache.interned_strings_buffer = 8
opcache.max_accelerated_files = 4000
3-2. KeepAliveの有効化
ApacheのKeepAliveを有効にすることで、同一接続で複数のリクエストを処理し、オーバーヘッドを削減します。
KeepAlive On
MaxKeepAliveRequests 100
KeepAliveTimeout 5
3-3. 不要なモジュールの無効化
使用しないApacheモジュールを無効にすることで、セキュリティリスクを低減し、メモリ使用量を削減します。
sudo a2dismod autoindex
sudo systemctl restart apache2
4. セキュリティ確認とテスト
PHPやApacheのセキュリティ設定が適用されているか、以下の方法で確認します。
sudo apachectl configtest
php -i | grep disable_functions
設定が反映されていない場合は、ApacheとPHPを再起動します。
sudo systemctl restart apache2
これでmod_phpのセキュリティと最適化が完了しました。次は、トラブルシューティングの方法について解説します。
トラブルシューティング
Apacheでmod_phpを使用している際にPHPが動作しない、またはエラーが発生する場合があります。このセクションでは、mod_phpの一般的な問題とその解決方法を解説します。
1. PHPが動作しない場合の確認事項
1-1. ApacheがPHPファイルを処理していない
PHPファイルがそのまま表示される場合は、ApacheがPHPを認識していません。
対処法:httpd.conf
またはVirtualHost設定ファイルに以下を追加します。
AddHandler application/x-httpd-php .php
LoadModule php_module modules/libphp.so
その後、Apacheを再起動します。
sudo systemctl restart apache2 # Ubuntu/Debian
sudo systemctl restart httpd # CentOS/RHEL
1-2. mod_phpがインストールされていない
対処法:
以下のコマンドでmod_phpがインストールされているか確認します。
php -v
apachectl -M | grep php
mod_phpが表示されない場合はインストールします。
sudo apt install libapache2-mod-php # Ubuntu/Debian
sudo yum install php php-cli php-common # CentOS/RHEL
2. PHPエラーが表示されない
エラーが表示されず、原因がわからない場合は、エラーログを有効にします。
対処法:php.ini
を編集し、以下の設定を確認または変更します。
display_errors = Off
log_errors = On
error_log = /var/log/php_errors.log
Apacheを再起動して設定を反映します。
sudo systemctl restart apache2
ログを確認します。
sudo tail -f /var/log/php_errors.log
3. 403 Forbiddenエラーが発生する
PHPファイルにアクセスしようとすると403エラーが表示される場合は、ディレクトリの権限やSELinuxが原因です。
対処法:
- Apacheがファイルにアクセスできるようにします。
sudo chown -R www-data:www-data /var/www/html # Ubuntu/Debian
sudo chown -R apache:apache /var/www/html # CentOS/RHEL
- パーミッションを設定します。
sudo chmod -R 755 /var/www/html
- SELinuxを無効または調整します。
sudo setenforce 0
4. 500 Internal Server Errorが発生する
500エラーは設定ミスやPHPファイルのエラーが原因で発生します。
対処法:
- エラーログを確認します。
sudo tail -f /var/log/apache2/error.log # Ubuntu/Debian
sudo tail -f /var/log/httpd/error_log # CentOS/RHEL
php.ini
の記述ミスを修正します。
5. phpinfo()が表示されない
phpinfo()を記述したファイルが動作しない場合は、PHPが正しく設定されていません。
対処法:
- Apacheの設定を確認します。
sudo apachectl -M | grep php
httpd.conf
を編集し、以下を確認します。
LoadModule php_module modules/libphp.so
AddHandler application/x-httpd-php .php
DirectoryIndex index.php index.html
- Apacheを再起動します。
sudo systemctl restart apache2
6. PHPのバージョンが古い
PHPのバージョンが古い場合、アップデートが必要です。
対処法:
sudo apt update
sudo apt upgrade php libapache2-mod-php # Ubuntu/Debian
sudo yum update php php-cli php-common # CentOS/RHEL
その後、Apacheを再起動します。
7. メモリ不足によるPHPの停止
PHPスクリプトがメモリ不足で停止する場合は、メモリ制限を引き上げます。
対処法:php.ini
を編集します。
memory_limit = 256M
Apacheを再起動して変更を反映します。
sudo systemctl restart apache2
これで主要なトラブルシューティングが完了しました。次は本記事のまとめを解説します。
まとめ
本記事では、Apacheでmod_phpを有効にしてPHPを動作させる方法について詳しく解説しました。mod_phpのインストール方法からApache設定ファイルの編集、VirtualHostでの設定、セキュリティ強化、そしてトラブルシューティングまで一連の流れを説明しました。
PHPを安全かつ効率的に運用するためには、php.iniの適切な設定やディレクトリの権限管理が重要です。また、エラーログの確認やバージョン管理を定期的に行うことで、問題が発生した際の迅速な対応が可能になります。
mod_phpを正しく設定し、セキュリティ対策を徹底することで、安定したWebサイトの運用が実現します。本記事の手順を参考に、ApacheとPHPの環境を構築して、安全で快適なWebサービスを提供してください。
コメント