Table of Contents [expand]
この記事の英語版に更新があります。ご覧の翻訳には含まれていない変更点があるかもしれません。
最終更新日 2025年04月23日(水)
ASP.NET Core アプリケーションを Heroku にデプロイするには、最小限の設定で済みます。ただし、Heroku のルーティングおよびセキュリティモデルに合わせてランタイム動作を構成することが重要です。
Heroku 環境の検出
Heroku はアプリの実行環境を確認できるよう、すべての dyno に DYNO 環境変数を設定します。
var isHeroku = !string.IsNullOrEmpty(Environment.GetEnvironmentVariable("DYNO"));
この環境変数を使用すると、必要に応じて Heroku 固有の構成を適用できます。
転送されたヘッダーの処理
Heroku はリクエストをリバースプロキシ経由でルーティングし、X-Forwarded-For や X-Forwarded-Proto のようなヘッダーを持つリクエストを転送します。クライアントの IP アドレスと HTTPS 検出を正しく処理するには、Program.cs で Forwarded Headers Middleware を構成します。
using Microsoft.AspNetCore.HttpOverrides;
var builder = WebApplication.CreateBuilder(args);
builder.Services.Configure<ForwardedHeadersOptions>(options =>
{
options.ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto;
options.KnownNetworks.Clear();
options.KnownProxies.Clear();
});
var app = builder.Build();
// Forwarded headers must come first
app.UseForwardedHeaders();
転送された情報が正しく処理されるように、パイプラインのできるだけ早い段階で UseForwardedHeaders() を配置します。
HTTPS の強制
Heroku は HTTP リクエストを HTTPS に自動的にリダイレクトしません。アプリで HTTPS リダイレクトを強制するには、以下を追加します。
builder.Services.AddHttpsRedirection(options =>
{
options.RedirectStatusCode = StatusCodes.Status308PermanentRedirect;
options.HttpsPort = 443;
});
app.UseHttpsRedirection();
UseHttpsRedirection() は UseForwardedHeaders() の後に呼び出されるようにします。
例
以下は Heroku 向けに最適化され、ローカル開発と互換性のある最小限の Program.cs 設定です。
using Microsoft.AspNetCore.HttpOverrides;
using Microsoft.AspNetCore.Http;
var builder = WebApplication.CreateBuilder(args);
var isHeroku = !string.IsNullOrEmpty(Environment.GetEnvironmentVariable("DYNO"));
builder.Services.Configure<ForwardedHeadersOptions>(options =>
{
options.ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto;
if (isHeroku)
{
options.KnownNetworks.Clear();
options.KnownProxies.Clear();
}
});
builder.Services.AddHttpsRedirection(options =>
{
if (isHeroku)
{
options.RedirectStatusCode = StatusCodes.Status308PermanentRedirect;
options.HttpsPort = 443;
}
});
var app = builder.Build();
app.UseForwardedHeaders();
app.UseHttpsRedirection();
app.MapGet("/", () => "Hello from Heroku!");
app.Run();
まとめ
Heroku で ASP.NET Core アプリを正常に実行するには、次の手順に従います。
DYNO 環境変数を使用して Heroku 環境を検出します。- Forwarded Headers MiddleWare を早めに構成します。
- HTTPS リダイレクトを強制します。
この設定を使用して、アプリが Heroku で正しく安全に動作するようにします。