PHP Web サーバーの管理
最終更新日 2025年04月10日(木)
Table of Contents
Heroku では Apache HTTPD 2.4 と Nginx が専用 Web サーバーとしてサポートされています。ユーザーはテスト目的で PHP のビルトイン Web サーバーを使用することもできますが、これは推奨されていません。利用可能な Web サーバーのバージョンを確認するには、「Heroku の PHP サポートリファレンス」を参照してください。
「Web」dyno タイプに Procfile
エントリがないとき、Apache Web サーバーは PHP ランタイムと併用されます。
Apache
Apache は、FastCGI 経由で mod_proxy_fcgi
を使用して、PHP-FPM とインターフェース接続します。
Apache を PHP-FPM と一緒に正しい設定で起動するには、heroku-php-apache2
スクリプトを使用します。
web: heroku-php-apache2
デフォルトでは、プロジェクトのルートフォルダはドキュメントルートとして使用されます。サブディレクトリを使用するために、サブフォルダの名前 (たとえば「public_html」) を引数としてブートスクリプトに渡すことができます。
web: heroku-php-apache2 public_html/
正規の .htaccess
ファイルを使用して Apache の動作 (URL 書き換えなど) をカスタマイズできます。この詳細や Apache の設定をカスタマイズする他のオプションについては、該当する Dev Center の記事を参照してください。
Nginx
Nginx は、FastCGI 経由で PHP-FPM とインターフェース接続します。
Nginx を PHP-FPM と一緒に正しい設定で起動するには、heroku-php-nginx
スクリプトを使用します。
web: heroku-php-nginx
デフォルトでは、プロジェクトのルートフォルダはドキュメントルートとして使用されます。サブディレクトリを使用するために、サブフォルダの名前 (たとえば「public_html」) を引数としてブートスクリプトに渡すことができます。
web: heroku-php-nginx public_html/
Nginx の設定をカスタマイズするさまざまな方法の詳細は、該当する Dev Center の記事を参照してください。
PHP ビルトイン Web サーバー
テスト目的のため、php -S
コマンドを使用して PHP のビルトイン Web サーバーを起動できます。このコマンドには、リクエストを処理するためのバインド先となるインターフェースとポートを指定する引数が必要です。
使用するインターフェースはアプリの世代によって異なります。ポートは動的であり、$PORT
という環境変数で利用できます。これはコマンド文字列で参照できます。
localhost
などではなく、すべての IP インターフェースにバインドすることが重要です。そうしないと、Heroku のルーティングがリクエストを Web サーバーに転送できなくなります。
-t
オプションを使用して代替ドキュメントルートを渡すことも、ルータースクリプトを指定してリクエストを引数として処理することもできます。詳細は、PHP プロジェクトのビルトイン Web サーバーに関するドキュメントを参照してください。
Cedar
Cedar 世代の Heroku プラットフォームでは IPv4 を使用します。Web プロセスは、IPv4 アドレス「0.0.0.0
」を使用して「任意の」インターフェースにバインドする必要があります。
Cedar アプリのビルトイン PHP Web サーバーには、次の Procfile
エントリを使用します。
web: php -S "0.0.0.0:${PORT}"
アプリのサブディレクトリを public_html
などのドキュメントルートとして使用するには、-t
オプションを使用して指定します。
web: php -S "0.0.0.0:${PORT}" -t public_html/
Fir
Fir 世代の Heroku プラットフォームでは IPv6 を使用します。Web プロセスは、IPv6 短縮アドレス「::
」を使用して「任意の」インターフェースにバインドする必要があります。
IPv6 アドレスでは、グループ区切り文字としてコロン (「:
」) を使用します。コロンは、たとえば URL のホストとポートの部分を区切るためや、php
の -S
オプションなど、address:port
表記が使用される場所でも使用されます。このような場合、IPv6 アドレスは角括弧で囲まれます。
多くのコマンドシェルは角括弧を特殊文字として扱うため、このようなアドレスは引用符で囲む必要があります。
Heroku アプリがバインドする必要があるポート番号は $PORT
環境変数で使用できるため、変数を展開できるように二重引用符が使用されます。
Cedar アプリのビルトイン PHP Web サーバーには、次の Procfile
エントリを使用します。
web: php -S "[::]:${PORT}"
アプリのサブディレクトリを public_html
などのドキュメントルートとして使用するには、-t
オプションを使用して指定します。
web: php -S "[::]:${PORT}" -t public_html/