ASP.NET Core 2.0でリバースプロキシの後ろにある場合にスキームを維持したい
Created at:
ASP.NET Core 2.0でアプリケーションがリバースプロキシの後ろにあるケースで、リバースプロキシがHTTPSで受け、アプリにはHTTPで受け渡すような構成というのはよくあるかと思います。
しかしASP.NET Coreは標準のままでは Request.Scheme
には”http”が入ることになり、”https”が入っていなくて不都合が…という状況が発生します。
そんな時は大抵のリバースプロキシが送り出すであろう X-Forwarded-*
ヘッダーフィールドを反映するミドルウェアがあるのでそれを有効にすることで、リバースプロキシにアクセスされた際の情報を維持できます。
その機能を有効にするには UseForwardedHeaders
メソッドでミドルウェアを使用するようにし、その際にどのヘッダーフィールドを使うかを指定します。次の例は上位サーバーからのリクエストの X-Forwareded-Proto
(スキーム)を見るようにするという設定です。
app.UseForwardedHeaders(new ForwardedHeadersOptions
{
ForwardedHeaders = Microsoft.AspNetCore.HttpOverrides.ForwardedHeaders.XForwardedProto
});