Apacheで特定の仮想ホストにのみPHPを有効にする設定方法

Apacheで複数の仮想ホストを管理する場合、特定のホストだけでPHPを有効にしたいケースがあります。たとえば、複数のサイトを1台のサーバーで運用しており、その中でPHPを必要とするのは特定のサイトだけという状況です。

デフォルトではApacheにPHPをインストールすると、すべての仮想ホストでPHPが有効になりますが、セキュリティやパフォーマンスの観点から、PHPを必要としない仮想ホストでは無効にしておく方が望ましいです。

本記事では、Apacheの設定ファイルを編集して、特定の仮想ホストでのみPHPを動作させる方法を詳しく解説します。具体的には、モジュール版PHPとCGI版PHPの違いを踏まえた上で、仮想ホストごとの設定方法や動作確認の手順を紹介します。

これにより、PHPを効率的に管理し、サーバーのセキュリティや安定性を向上させることができます。

目次

Apacheの仮想ホストとは


Apacheの仮想ホスト(Virtual Host)は、1台のサーバーで複数のウェブサイトを同時に運用するための仕組みです。ドメインごとに異なるサイトを提供する場合や、異なるプロジェクトを同一サーバーで管理する際に役立ちます。

仮想ホストには以下の2種類があります。

1. 名前ベースの仮想ホスト


同じIPアドレスで複数のドメインを処理します。リクエストされるホスト名(例:www.example.com)を基にして、対応する仮想ホストを特定します。コストを抑えて複数のサイトを管理できる点が利点です。

2. IPベースの仮想ホスト


サーバーの複数のIPアドレスに対して異なるウェブサイトを割り当てます。特定のIPアドレスごとに異なるサイトを運用する必要がある場合に使用されます。SSL証明書の要件などで用いられることがあります。

仮想ホストはApacheの設定ファイルで構成されており、各ホストごとに独自のディレクトリやログファイル、設定を持つことができます。これにより、ドメインごとに異なる動作をさせたり、サイトごとにPHPやその他のモジュールの有効・無効を切り替えることが可能になります。

PHPのモジュールとCGIの違い


ApacheでPHPを動作させる方法には主に「モジュール版(mod_php)」と「CGI版(Common Gateway Interface)」の2種類があります。それぞれの動作方式にはメリットとデメリットがあり、仮想ホストの設定において重要なポイントとなります。

1. モジュール版PHP(mod_php)


Apacheに直接組み込まれる形で動作します。リクエストがあるたびにApacheがPHPエンジンを呼び出し、即座に処理します。

メリット

  • 処理速度が速い(Apacheと密に連携するためオーバーヘッドが少ない)
  • 設定がシンプルで、導入が容易

デメリット

  • 全ての仮想ホストでPHPが有効になってしまう
  • PHPのバージョンを仮想ホストごとに切り替えるのが難しい
  • メモリ消費が多くなる場合がある

2. CGI版PHP


PHPスクリプトをApacheとは別プロセスとして実行します。リクエストがあるたびにPHPエンジンが独立して起動します。

メリット

  • 仮想ホストごとにPHPのバージョンを切り替えられる
  • 必要な仮想ホストでのみPHPを有効化できる
  • セキュリティの制御がしやすい

デメリット

  • 処理速度が遅くなる(都度プロセスが起動するためオーバーヘッドが発生)
  • 設定がやや複雑

選択のポイント


複数の仮想ホストでPHPを一律に有効にしたい場合はモジュール版が適しています。一方で、特定の仮想ホストだけでPHPを動作させる場合や、仮想ホストごとに異なるPHPバージョンを使いたい場合はCGI版が有利です。

本記事では、特定の仮想ホストでのみPHP

を有効にする方法として、CGI版PHPの活用方法を中心に解説していきます。これにより、不要な仮想ホストでPHPが動作するリスクを回避し、必要な仮想ホストでのみ効率的にPHPを運用することが可能になります。

仮想ホスト設定ファイルの基本構成


Apacheの仮想ホスト設定ファイルは、各ドメインやサブドメインの挙動を定義するための重要なファイルです。仮想ホストごとに異なるディレクトリや設定を適用することで、サーバー上で複数のサイトを独立して運用できます。

仮想ホスト設定ファイルの配置場所


仮想ホストの設定ファイルは通常、以下の場所に配置されます。

  • CentOS/RHEL系: /etc/httpd/conf.d/
  • Ubuntu/Debian系: /etc/apache2/sites-available/

サイトを有効にする場合は、a2ensiteコマンドを使用してsites-enabledディレクトリにシンボリックリンクを作成します。

sudo a2ensite example.com.conf
sudo systemctl reload apache2

仮想ホスト設定ファイルの基本例


以下は、シンプルな仮想ホストの設定例です。

<VirtualHost *:80>
    ServerAdmin admin@example.com
    ServerName example.com
    DocumentRoot /var/www/example.com/public_html
    ErrorLog ${APACHE_LOG_DIR}/example.com_error.log
    CustomLog ${APACHE_LOG_DIR}/example.com_access.log combined
</VirtualHost>

設定の各項目

  • ServerAdmin: 管理者のメールアドレス
  • ServerName: この仮想ホストが対応するドメイン名
  • DocumentRoot: ウェブサイトの公開ディレクトリ
  • ErrorLog: エラーログの出力先
  • CustomLog: アクセスログの出力先

仮想ホストごとのディレクトリ構成例

/var/www/
│
├── example.com/
│   ├── public_html/  # サイトのHTML・PHPファイル
│   ├── logs/         # ログファイル
│   └── backups/      # バックアップファイル

このように仮想ホストごとにディレクトリを分けることで、運用が容易になります。次のセクションでは、この設定を基にPHPを特定の仮想ホストでのみ有効化する方法を解説します。

PHPを特定の仮想ホストでのみ有効にする方法


特定の仮想ホストでのみPHPを有効にするには、Apacheの設定をカスタマイズし、必要な仮想ホストに対してPHPを明示的に有効化します。ここでは、CGI版PHPを利用して特定の仮想ホストでPHPを動作させる方法を解説します。

1. PHPモジュールの無効化(全体)


まず、Apache全体でPHPモジュール(mod_php)が動作している場合は無効にします。これにより、すべての仮想ホストでPHPが自動的に有効になるのを防ぎます。

sudo a2dismod php8.1  # PHPモジュールを無効化
sudo systemctl reload apache2

2. 特定の仮想ホストでPHP-CGIを有効にする


次に、PHPを動作させたい仮想ホストの設定ファイルを編集し、PHP-CGIを有効にします。

設定例(/etc/apache2/sites-available/example.com.conf):

<VirtualHost *:80>
    ServerAdmin admin@example.com
    ServerName example.com
    DocumentRoot /var/www/example.com/public_html

    <Directory /var/www/example.com/public_html>
        Options +ExecCGI
        AddHandler php-cgi .php
        Action php-cgi /cgi-bin/php8.1
    </Directory>

    ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
    <Location /cgi-bin/php8.1>
        Options +ExecCGI
        SetHandler cgi-script
    </Location>

    ErrorLog ${APACHE_LOG_DIR}/example.com_error.log
    CustomLog ${APACHE_LOG_DIR}/example.com_access.log combined
</VirtualHost>

3. PHP-CGIの設置


PHP-CGIがシステムにインストールされているか確認します。もしインストールされていない場合は以下のコマンドで導入します。

sudo apt install php8.1-cgi

CGIバイナリが/usr/lib/cgi-bin/php8.1に配置されていることを確認し、必要に応じてシンボリックリンクを作成します。

sudo ln -s /usr/bin/php-cgi /usr/lib/cgi-bin/php8.1

4. 設定の反映


設定を反映させるためにApacheをリロードします。

sudo systemctl reload apache2

動作確認


仮想ホストのルートディレクトリにphpinfo.phpを作成し、PHPが動作するか確認します。

<?php
phpinfo();
?>

ブラウザでhttp://example.com/phpinfo.phpにアクセスし、PHPの情報が表示されれば設定完了です。

この方法により、PHPを必要とする仮想ホストでのみPHPを有効にでき、セキュリティとリソースの最適化が図れます。

設定変更後の動作確認方法


仮想ホストの設定を変更した後は、PHPが正しく有効になっているかを確認することが重要です。ここでは、動作確認のための具体的な手順を解説します。

1. Apacheの設定ファイルの構文チェック


まず、Apacheの設定ファイルにエラーがないか確認します。

sudo apachectl configtest

結果例:

Syntax OK

エラーが表示された場合は、指摘された行を修正して再度テストを行います。

2. 仮想ホストの有効化と再起動


仮想ホストが正しく有効化されているか確認し、必要に応じて有効化します。

sudo a2ensite example.com.conf
sudo systemctl reload apache2

これにより、仮想ホストの設定が反映されます。

3. PHPの動作確認


PHPが正しく動作しているかを確認するために、仮想ホストのルートディレクトリにphpinfo.phpファイルを作成します。

ファイル作成コマンド:

sudo nano /var/www/example.com/public_html/phpinfo.php

phpinfo.php の内容:

<?php
phpinfo();
?>

ブラウザで以下のURLにアクセスします。

http://example.com/phpinfo.php

PHPの情報が表示されれば、PHPは正常に動作しています。

4. CGI版PHPの確認


PHPがCGI経由で動作していることを確認するには、phpinfo()の「Server API」項目を確認します。

表示例:

Server API: CGI/FastCGI

このように「CGI/FastCGI」と表示されていれば、CGI版PHPが動作していることを示します。

5. エラーログの確認


問題が発生した場合は、仮想ホストのエラーログを確認します。

sudo tail -f /var/log/apache2/example.com_error.log

ログを確認して、PHPスクリプトがエラーなく実行されているかチェックします。

このプロセスにより、PHPが特定の仮想ホストで適切に動作しているかを簡単に確認できます。動作に問題がある場合は、ログを参照しながら設定を見直してください。

トラブルシューティング


PHPが特定の仮想ホストで正しく動作しない場合、いくつかの原因が考えられます。このセクションでは、よくある問題とその解決方法を紹介します。

1. 403 Forbiddenエラーが表示される


原因:

  • PHPファイルやディレクトリのパーミッションが適切でない。
  • ApacheがPHPスクリプトの実行を許可していない。

解決方法:

  1. 仮想ホストの設定でExecCGIオプションが正しく設定されているか確認します。
<Directory /var/www/example.com/public_html>
    Options +ExecCGI
</Directory>
  1. PHPファイルとディレクトリのパーミッションを確認・修正します。
sudo chmod 755 /var/www/example.com/public_html
sudo chmod 644 /var/www/example.com/public_html/phpinfo.php
  1. Apacheを再起動します。
sudo systemctl reload apache2

2. 500 Internal Server Errorが表示される


原因:

  • PHP CGIのパスが間違っている。
  • CGIの実行権限が不足している。

解決方法:

  1. CGIスクリプトが正しい場所にあるか確認します。
ls -l /usr/lib/cgi-bin/php8.1
  1. 実行権限を付与します。
sudo chmod +x /usr/lib/cgi-bin/php8.1
  1. 仮想ホストの設定でCGIスクリプトのパスが正しいか確認します。
ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
  1. エラーログを確認して詳細を把握します。
sudo tail -f /var/log/apache2/example.com_error.log

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


原因:

  • PHPがインストールされていない。
  • 仮想ホストでPHPが正しく有効化されていない。

解決方法:

  1. PHPがインストールされているか確認します。
php -v
  1. PHP CGIモジュールがインストールされているか確認します。
sudo apt install php8.1-cgi
  1. 仮想ホストの設定を確認し、PHPが正しく有効化されているか見直します。
AddHandler php-cgi .php
Action php-cgi /cgi-bin/php8.1

4. エラーログが出力されない


原因:

  • エラーログのディレクトリが存在しないか、パーミッションが不適切。

解決方法:

  1. エラーログのディレクトリを作成します。
sudo mkdir -p /var/log/apache2
sudo chown www-data:www-data /var/log/apache2
  1. 仮想ホスト設定でエラーログのパスが正しいか確認します。
ErrorLog ${APACHE_LOG_DIR}/example.com_error.log

これらの手順を踏むことで、多くのPHP動作不良を解消できるはずです。問題が解決しない場合は、ApacheとPHPの設定を改めて見直し、必要に応じて公式ドキュメントを参照してください。

まとめ


本記事では、Apacheで特定の仮想ホストにのみPHPを有効にする方法について解説しました。

PHPのモジュール版とCGI版の違いを理解し、Apacheの仮想ホスト設定をカスタマイズすることで、必要なホストだけでPHPを有効にすることが可能です。これにより、セキュリティを強化し、リソースの最適化が図れます。

設定のポイントは以下の通りです。

  • Apache全体でPHPモジュールを無効化する。
  • PHPを有効にしたい仮想ホストでCGI版PHPを設定する。
  • 設定後はphpinfo()を活用して動作確認を行う。

問題が発生した場合はエラーログを確認し、パーミッションやCGIの実行権限などを見直しましょう。適切な仮想ホスト管理を行うことで、サーバーの安定性とセキュリティを向上させることができます。

コメント

コメントする

目次