テクノロジーガイド

PHP FastCGI とサイト別 php.ini の設定とテスト

2 min read サーバー管理 更新されました 21 Oct 2025
サイト別 PHP FastCGI の設定とテスト
サイト別 PHP FastCGI の設定とテスト

テスト手順

まずは簡単な PHP テストをサイトに置いて、FastCGI 経由で動作しているか確認します。以下は例です。

vi /srv/www/web1/web/info.php

コード内容は次の通りです。

ブラウザで次を開きます: http://www.example1.com/info.php

期待する表示: Server API 行に “CGI/FastCGI” が含まれていること。

phpinfo() 出力 — Server API に CGI/FastCGI が表示されたスクリーンショット

重要: テストファイルは公開ディレクトリに置かれるため、運用サーバーではアクセス制限をかけるか、テスト終了後に削除してください。

サイトごとの php.ini を使う理由

1つのサーバーで複数サイトを運用する場合、サイトごとに異なる PHP 設定(例: メモリ制限、拡張モジュール、エラーログ出力)を使いたいことがあります。php-fcgi のラッパースクリプトをサイト単位に用意すれば、PHPRC 環境変数で php.ini の読み込み先を変えられます。

手順の例。

cp /etc/php5/fastcgi/php.ini /srv/www/web2/
chown web2:web2 /srv/www/web2/php.ini

次に、サイト用の php-fcgi-starter スクリプトを編集します。

vi /srv/www/php-fcgi-scripts/web2/php-fcgi-starter

スクリプト内で PHPRC をサイトのディレクトリに設定します。

#!/bin/sh
PHPRC=/srv/www/web2/
export PHPRC
export PHP_FCGI_MAX_REQUESTS=5000
export PHP_FCGI_CHILDREN=8
exec /usr/bin/php-cgi

設定変更後は Apache を再起動します。

systemctl restart apache2.service

www.example2.com に同様の info.php を作成し、ブラウザで開いてください。Loaded Configuration File 行に /srv/www/web2/php.ini が表示されれば成功です。

phpinfo() 出力 — Loaded Configuration File に /srv/www/web2/php.ini が表示されている

単一の PHP 設定だけを変更する方法

全体の php.ini を差し替える代わりに、php-cgi 実行時に -d オプションで個別設定を上書きできます。これは軽微なチューニングに便利です。

例: magic_quotes_gpc を無効化する場合。

vi /srv/www/php-fcgi-scripts/web2/php-fcgi-starter

スクリプトを次のように変更します。

#!/bin/sh
PHPRC=/etc/php5/fastcgi/
export PHPRC
export PHP_FCGI_MAX_REQUESTS=5000
export PHP_FCGI_CHILDREN=8
exec /usr/bin/php-cgi -d magic_quotes_gpc=off

変更後は必ず Apache を再起動します。

systemctl restart apache2.service

ブラウザで info.php を再読み込みし、magic_quotes_gpc の値が Off になっていることを確認してください。

phpinfo() 出力 — magic_quotes_gpc が Off と表示されている

確認とトラブルシューティング

チェックリスト:

  • phpinfo() に Server API が CGI/FastCGI と表示されているか。
  • Loaded Configuration File が期待する php.ini を指しているか。
  • Apache を再起動後に変更が反映されるか。
  • 権限: php.ini とそのディレクトリに PHP 実行ユーザーがアクセスできるか。
  • SELinux/AppArmor を使用している場合はポリシーが新しいパスを許可しているか。

よくある問題と対処:

  • 表示が古い/反映されない: Apache の再起動が漏れていないか確認。php-fpm ではなく php-cgi を使っていると、デーモン再起動が必要な場合がある。
  • パーミッションエラー: php.ini の所有権とパーミッションを見直す。一般的に root が所有し、ウェブユーザーが読み取り可能なら十分。
  • 指定した php.ini が読み込まれない: PHPRC のパス末尾にスラッシュを付ける/外すで挙動が変わることがあるため、両方を試す。

制約と失敗するケース:

  • PHP のモジュールがビルド時にシステム全体に固定されている場合、php.ini だけでは変更できない設定がある。
  • 古い PHP バージョンやディストリビューション固有のパッケージ管理があると、期待通りに動作しないことがある。

代替アプローチ

  • php-fpm を使う: サイトごとにプールを作り、php_admin_value で設定を固定できます。スケーラビリティや管理性の面で有利です。
  • Docker コンテナ: サイトごとに異なる PHP コンテナを用意すると、完全に独立したランタイムを提供できます。
  • .user.ini や ini_set(): 一部の設定は .user.ini またはランタイムで変更可能ですが、すべての設定に対応するわけではありません。

運用チェックリスト(役割別)

管理者(Sysadmin):

  • 各サイトの php-fcgi-starter をソース管理に入れる。
  • php.ini の変更履歴を残す。
  • Apache と PHP のアップデートをテスト環境で検証する。

開発者(Developer):

  • 本番にデプロイする前に phpinfo() を使った設定確認を行う。
  • セキュリティ設定(display_errors, expose_php など)をサイト用 php.ini で固定する。

運用(Ops):

  • テスト用 info.php は運用監視が済んだら削除する。
  • 変更時は影響範囲をドキュメント化する(ログ設定、メモリ制限など)。

ミニ方法論: サイト別設定を導入する簡易手順

  1. テストサイトで手順を検証する。
  2. 元の php.ini をコピーし、サイト用に調整する。
  3. php-fcgi-starter で PHPRC を設定または -d オプションを追加する。
  4. Apache を再起動し、phpinfo() で検証する。
  5. 変更をバージョン管理し、ロールアウト計画を作る。

簡易用語集(1 行)

  • PHPRC: PHP が参照する php.ini のディレクトリを示す環境変数。
  • php-cgi: CGI 互換インターフェースで PHP を実行するバイナリ。
  • php-fpm: FastCGI のプロセスマネージャ。高負荷向けの代替手段。

まとめ

サイトごとに php.ini を分けることで、柔軟に PHP 設定を管理できます。個別設定は PHPRC を使うか、php-cgi の -d オプションで上書きします。運用時は権限、再起動、セキュリティの確認を忘れないでください。

参考リンク

共有する: X/Twitter Facebook LinkedIn Telegram
著者
編集

類似の素材

Debian 11 に Podman をインストールして使う
コンテナ

Debian 11 に Podman をインストールして使う

Apt-pinning入門:Debianで複数リポジトリを管理
Linux

Apt-pinning入門:Debianで複数リポジトリを管理

OptiScalerでFSR 4を全対応ゲームに導入する方法
ゲーム

OptiScalerでFSR 4を全対応ゲームに導入する方法

Dansguardian と Squid(NTLM)を Debian Etch に導入する方法
ネットワーク

Dansguardian と Squid(NTLM)を Debian Etch に導入する方法

AndroidでSDカードのインストールエラーを修正する方法
トラブルシューティング

AndroidでSDカードのインストールエラーを修正する方法

KNetAttach と KDE の remote:/ でネットワークフォルダーを設定
Linux ネットワーク

KNetAttach と KDE の remote:/ でネットワークフォルダーを設定