Table of Contents [expand]
最終更新日 2025年04月10日(木)
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/