使用 Nginx 反向代理 ASP.NET Core 程序
写本文时 ASP.NET Core 版本为3.1,最新的官方参考文档地址:https://docs.microsoft.com/zh-cn/aspnet/core/host-and-deploy/linux-nginx?view=aspnetcore-3.1
但是按照官方文档设置,发现配置并未生效,系统并未使用 X-Forwarded-Proto 等头部信息。
官方知道配置摘要如下:
调用其他中间件之前,请先在 Startup.Configure 的基础上调用 UseForwardedHeaders 方法。 配置中间件以转接 X-Forwarded-For 和 X-Forwarded-Proto 标头:
app.UseForwardedHeaders(new ForwardedHeadersOptions { ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto });
默认情况下,在环回地址 (127.0.0.0/8, [::1])(包括标准 localhost 地址 (127.0.0.1))上运行的代理受信任。 如果组织内的其他受信任代理或网络处理 Internet 与 Web 服务器之间的请求,请使用 ForwardedHeadersOptions 将其添加到 KnownProxies 或 KnownNetworks 的列表。 以下示例会将 IP 地址为 10.0.0.100 的受信任代理服务器添加到 Startup.ConfigureServices 中的转接头中间件 KnownProxies:
services.Configure<ForwardedHeadersOptions>(options => { options.KnownProxies.Add(IPAddress.Parse("10.0.0.100")); });
微调后的配置:
Startup.ConfigureServices
services.Configure<ForwardedHeadersOptions>(options => { options.KnownProxies.Add(IPAddress.Parse("10.0.0.100")); options.ForwardedHeaders = ForwardedHeaders.All; });
Startup.Configure
app.UseForwardedHeaders();
通过以上调整,X-Forwarded-For 和 X-Forwarded-Proto 等信息就会被 kestrel 使用。
原文链接地址:http://blog.exsvc.cn/article/aspnet-core-nginx.html
转载请注明:转载自 易科博客 ,谢谢!