Windows Elastic Compute Service (ECS) インスタンスに PHP アプリケーションをデプロイする場合、PHP の非スレッドセーフ (NTS) バージョンをインターネットインフォメーションサービス (IIS) の FastCGI モジュールと統合することで、Web サイトのパフォーマンスとセキュリティを確保できます。このガイドでは、サイトのディレクトリ権限と専用アプリケーションプールの設定方法について説明します。
仕組み
このソリューションは、IIS の FastCGI モジュールを PHP インタープリターと統合して、PHP Web ページを解析し、提供します。外部からのリクエストは、まずインスタンスのセキュリティグループによってフィルタリングされます。次に、IIS はハンドラーマッピングを使用して .php リクエストを FastCGI プロセスプール内の php-cgi.exe プロセスに転送します。その後、IIS は結果をクライアントに返します。
主要コンポーネント
ユーザーのブラウザが、パブリックネットワーク経由で ECS インスタンスのポート 80 に HTTP リクエストを送信します。
IIS が HTTP リクエストを受信します。リクエストが
.phpファイルに対するものである場合、IIS のハンドラーマッピングルールは FastCGI プロトコルを介してリクエストを PHP の CGI 実行可能ファイル (php-cgi.exe) に転送します。FastCGI モジュールは、リクエストを受信して対応する PHP スクリプトを実行する
php-cgi.exeプロセスのプールを管理します。PHP インタープリターがビジネスロジックを実行し、生成された HTML コンテンツやその他のデータを IIS に返します。
IIS は最終結果を HTTP レスポンスとしてクライアントに返します。
操作手順
以下の手順では、Windows Server 2022 を例として使用します。
ステップ 1:IIS と CGI モジュールのインストール
ECS インスタンスにログインします。
ECS コンソール - インスタンス に移動します。上部のナビゲーションバーで、対象のリージョンとリソースグループを選択します。
対象インスタンスの詳細ページに移動し、[接続] をクリックし、[ワークベンチ] を選択します。接続方法を [ターミナル] に設定し、ユーザー名とパスワードを入力して、グラフィカルターミナルページにログインします。
タスクバーの検索ボックスに [サーバーマネージャー] と入力して開きます。
[役割と機能の追加] を選択します。ウィザードで [次へ] をクリックして [サーバーの役割] ページに移動し、[Web サーバー (IIS)] チェックボックスを選択します。
表示されるダイアログボックスで [機能の追加] をクリックし、[次へ] をクリックして [役割サービス] ページに移動します。
[役割サービス] リストで、 を展開し、[CGI] チェックボックスを選択します。[次へ] をクリックし、[インストール] をクリックします。
インストールが完了したら、[閉じる] をクリックします。
ステップ 2:PHP ランタイム環境のインストール
PHP に必要な Microsoft Visual C++ 再頒布可能パッケージ をダウンロードしてインストールします。
PHP 公式サイト のダウンロードページに移動します。[VS17 X64 Non Thread Safe] の Zip パッケージを選択してダウンロードします。
IIS の FastCGI モジュールは、各プロセスが独立して実行されるマルチプロセスモデルを使用するため、スレッドセーフは不要です。PHP の非スレッドセーフ (NTS) バージョンは、これらの安全チェックを省略するため、IIS 環境でのパフォーマンスと安定性が向上します。
ダウンロードした Zip パッケージを、スペースを含まないディレクトリパス (例:
C:\php) に展開します。このパスが PHP のインストールディレクトリになります。
ステップ 3:PHP と IIS の統合設定
IIS が FastCGI プロトコルを使用して PHP インタープリターを呼び出すように設定します。これにより、IIS はリクエストを PHP インタープリターに転送して .php ファイルを処理できるようになります。
タスクバーの検索ボックスに [インターネットインフォメーションサービス (IIS) マネージャー] と入力して開きます。
左側のナビゲーションウィンドウで、サーバーのホスト名をクリックしてサーバーの機能ビューを開きます。
[ハンドラーマッピング] をダブルクリックします。右側の [操作] ウィンドウで、[モジュールマップの追加...] をクリックします。
表示されるダイアログボックスで、以下のパラメーターを設定します:
リクエストパス:
*.phpモジュール:
FastCgiModule実行可能ファイル (任意):
C:\php\php-cgi.exeファイル選択ダイアログボックスで、ファイルの種類を
.dllから.exeに変更するとphp-cgi.exeが見つかります。[名前]:
PHP via FastCGI
[OK] をクリックします。表示される確認ダイアログボックスで [はい] をクリックして、対応する FastCGI アプリケーションを作成します。
ステップ 4:Web サイトの作成と設定
新しい Web サイトを作成し、専用のアプリケーションプールとディレクトリ権限を設定します。
ディレクトリの作成と権限の設定
最小権限の原則に従い、IIS は新しいディレクトリに自動的に権限を付与しません。
IIS_IUSRSグループに手動で読み取り権限を付与する必要があります。これを怠ると、Web サイトにアクセスした際に 403 または 500 エラーが発生します。タスクバーの検索ボックスに[エクスプローラー]と入力して開きます。
Web サイトのルートディレクトリ (例:
C:\myphp) を作成します。Web サイトのルートディレクトリを右クリックし、 を選択します。
[選択するオブジェクト名を入力してください] ボックスに
IIS_IUSRSと入力し、[名前の確認] と [OK] をクリックします。新しく追加された
IIS_IUSRSグループを選択し、[読み取りと実行]、[フォルダーの内容の一覧表示]、[読み取り] の権限を付与します。[OK] をクリックして権限設定を保存します。
デフォルトの IIS Web サイトのポート変更
新しい Web サイトはポート 80 を使用する必要がありますが、このポートはデフォルトの IIS Web サイト (Default Web Site) がすでに占有しています。
タスクバーの検索ボックスに [インターネットインフォメーションサービス (IIS) マネージャー] と入力して開きます。
左側のナビゲーションウィンドウで、サーバーのホスト名を展開し、[サイト] をクリックします。
[Default Web Site] を選択します。右側の [操作] ウィンドウで、[バインド...] をクリックします。
ポートのバインドを選択し、[編集] をクリックしてポートを別の番号 (例:8080) に変更し、[OK] をクリックしてから [閉じる] をクリックします。
Web サイトの追加
左側のナビゲーションウィンドウで [サイト] ノードを右クリックし、[Web サイトの追加...] を選択します。
Web サイト情報を設定します:
[サイト名]:例:
MyPHP[物理パス]:Web サイトのルートディレクトリ、例:
C:\myphpポート:
80。
[OK] をクリックします。
ステップ 5:セキュリティグループの設定とセットアップの検証
テストページを作成して、環境構成を検証します。
セキュリティグループルールの設定
Web サイトへのパブリックネットワークアクセスを許可するには、インスタンスのセキュリティグループで Web サービスポートを開放します。
ECS コンソール - インスタンス に移動し、対象のインスタンス ID をクリックして詳細ページに移動します。
インスタンス詳細ページで [セキュリティグループ] タブをクリックし、対象のセキュリティグループの ID をクリックして詳細ページを開きます。
インバウンドルールの一覧で [ルールの追加] をクリックし、以下のパラメーターを設定してルールを保存します。
アクション: 許可
プロトコル: カスタム TCP
ソース:
0.0.0.0/0[宛先 (現在のインスタンス)]:
80/80
テストページの作成
Web サイトのルートディレクトリ (例:
C:\myphp) に、index.phpという名前のファイルを作成し、以下の内容を追加します:<?php phpinfo(); ?>テストページへのアクセス
Web ブラウザを開き、
http://<インスタンスのパブリック IP アドレス>/index.phpにアクセスします。ページに PHP の詳細情報が表示されれば、環境は正しく設定されています。