ApacheでPHPモジュール(mod_php)を有効にする手順を完全解説

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系

  1. パッケージリストを更新します。
sudo apt update
  1. mod_phpをインストールします。
sudo apt install php libapache2-mod-php
  1. Apacheを再起動して、mod_phpを有効化します。
sudo systemctl restart apache2
  1. インストールが完了したかを確認します。
php -v

CentOS/RHEL系

  1. EPELリポジトリを追加します。
sudo yum install epel-release
  1. mod_phpをインストールします。
sudo yum install php php-cli php-common
  1. Apacheを再起動して変更を反映します。
sudo systemctl restart httpd
  1. インストールが完了したかを確認します。
php -v

Windows環境でのインストール

  1. PHP公式サイトからPHPのWindows版をダウンロードします。
  2. ダウンロードしたZIPファイルを展開し、C:\php などのディレクトリに配置します。
  3. Apacheのhttpd.confファイルを編集し、以下を追加します。
LoadModule php_module "C:/php/php8apache2_4.dll"
AddHandler application/x-httpd-php .php
PHPIniDir "C:/php"
  1. Apacheを再起動して設定を反映します。

インストール後の確認


インストール後、ApacheがPHPを正しく認識しているか確認します。

  1. Apacheのドキュメントルート(例: /var/www/html)に以下の内容でphpinfo.phpファイルを作成します。
<?php
phpinfo();
?>
  1. ブラウザで「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系

  1. Apacheのモジュールを有効化します。
sudo a2enmod php
  1. Apacheを再起動して変更を反映します。
sudo systemctl restart apache2
  1. 設定ファイルが正しく記述されているか確認します。
sudo apachectl configtest


「Syntax OK」と表示されれば問題ありません。

CentOS/RHEL系

  1. httpd.confファイルを開きます。
sudo vi /etc/httpd/conf/httpd.conf
  1. 以下の行がコメントアウトされている場合は、コメントを解除します。
LoadModule php_module modules/libphp.so
AddType application/x-httpd-php .php
DirectoryIndex index.php index.html
  1. 保存してApacheを再起動します。
sudo systemctl restart httpd

Windows環境

  1. Apacheのhttpd.confを開きます。(例: C:\Apache24\conf\httpd.conf
  2. 以下の行を追加または編集します。
LoadModule php_module "C:/php/php8apache2_4.dll"
AddHandler application/x-httpd-php .php
PHPIniDir "C:/php"
  1. Apacheを再起動します。
httpd -k restart

PHPの動作確認

  1. ドキュメントルート(例: /var/www/html)にindex.phpを作成します。
<?php
echo "PHP is working!";
?>
  1. ブラウザで「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系

  1. VirtualHostの設定ファイルを作成します。
sudo nano /etc/apache2/sites-available/example.com.conf
  1. 以下のように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>
  1. 設定を有効化します。
sudo a2ensite example.com.conf
sudo systemctl reload apache2

CentOS/RHEL系

  1. VirtualHostの設定ファイルを作成します。
sudo vi /etc/httpd/conf.d/example.com.conf
  1. 以下の内容を追加します。
<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>
  1. 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

動作確認

  1. VirtualHostのドキュメントルートにPHPテストファイルを作成します。
sudo mkdir -p /var/www/example.com
sudo nano /var/www/example.com/index.php
  1. 以下のコードを記述します。
<?php
phpinfo();
?>
  1. 「http://example.com」にアクセスし、PHPの設定情報が表示されれば成功です。

VirtualHostでPHPを有効化することで、複数サイトの管理が容易になります。次は、PHPが正常に動作しているか確認する方法について解説します。

PHP情報の確認方法

Apacheにmod_phpを導入した後は、PHPが正しく動作しているかを確認する必要があります。phpinfo()関数を使用することで、PHPのバージョンや設定、ロードされているモジュールなどを簡単に確認できます。

phpinfo()を使った確認方法

  1. Apacheのドキュメントルート(例: /var/www/html)にPHPテストファイルを作成します。
sudo nano /var/www/html/phpinfo.php
  1. 以下のコードを記述します。
<?php
phpinfo();
?>
  1. ファイルを保存して、ブラウザで以下のURLにアクセスします。
http://サーバーのIPアドレス/phpinfo.php
  1. 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のバージョン確認方法

  1. ターミナルまたはコマンドプロンプトで以下のコマンドを実行します。
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バージョンを確認できます。

  1. ドキュメントルートにphpinfo.phpを作成し、ブラウザでアクセスします。
<?php
phpinfo();
?>


「PHP Version」の欄に、現在のmod_phpのバージョンが表示されます。

mod_phpの更新方法

Ubuntu/Debian系

  1. パッケージリストを更新します。
sudo apt update
  1. PHPのアップデートを行います。
sudo apt upgrade php libapache2-mod-php
  1. Apacheを再起動して更新を反映します。
sudo systemctl restart apache2
  1. バージョンが更新されたか確認します。
php -v

CentOS/RHEL系

  1. 現在のリポジトリで利用可能なPHPのバージョンを確認します。
yum list php
  1. PHPをアップデートします。
sudo yum update php php-cli php-common
  1. Apacheを再起動して更新を反映します。
sudo systemctl restart httpd

Windows環境

  1. PHP公式サイトから最新バージョンをダウンロードします。
  2. ダウンロードしたZIPファイルを展開し、現在のPHPディレクトリと置き換えます。
  3. httpd.confの設定が正しいか確認し、Apacheを再起動します。
httpd -k restart

複数のPHPバージョンを切り替える方法


複数のPHPバージョンをインストールし、サイトごとに異なるPHPバージョンを使用することが可能です。

Ubuntu/Debian系

  1. 利用可能なPHPバージョンを一覧表示します。
sudo update-alternatives --config php
  1. 使用するバージョンを選択します。

CentOS/RHEL系

  1. Remiリポジトリを利用して複数バージョンをインストールします。
sudo yum install php74 php81
  1. 使用するバージョンを切り替えます。
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_phpOff にすることで、HTTPヘッダーにPHPのバージョンが表示されなくなります。
  • display_errorsOff にすることで、エラーがブラウザに直接表示されなくなり、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が原因です。
対処法

  1. Apacheがファイルにアクセスできるようにします。
sudo chown -R www-data:www-data /var/www/html  # Ubuntu/Debian
sudo chown -R apache:apache /var/www/html      # CentOS/RHEL
  1. パーミッションを設定します。
sudo chmod -R 755 /var/www/html
  1. SELinuxを無効または調整します。
sudo setenforce 0

4. 500 Internal Server Errorが発生する

500エラーは設定ミスやPHPファイルのエラーが原因で発生します。
対処法

  1. エラーログを確認します。
sudo tail -f /var/log/apache2/error.log  # Ubuntu/Debian
sudo tail -f /var/log/httpd/error_log    # CentOS/RHEL
  1. php.iniの記述ミスを修正します。

5. phpinfo()が表示されない

phpinfo()を記述したファイルが動作しない場合は、PHPが正しく設定されていません。
対処法

  1. Apacheの設定を確認します。
sudo apachectl -M | grep php
  1. httpd.confを編集し、以下を確認します。
LoadModule php_module modules/libphp.so
AddHandler application/x-httpd-php .php
DirectoryIndex index.php index.html
  1. 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サービスを提供してください。

コメント

コメントする

目次