builder.Services.Configure<ForwardedHeadersOptions>
在 ASP.NET Core 中,ForwardedHeadersOptions
用于配置转发头(Forwarded Headers)的处理。转发头通常在代理服务器(如负载均衡器或反向代理)将请求转发到应用程序时使用。这些头信息包含了原始请求的客户端 IP 地址、主机名等信息,因为直接从 HttpContext
获取的信息可能只是代理服务器的地址。
配置 ForwardedHeadersOptions
以下是如何配置 ForwardedHeadersOptions
的示例:
csharp
var builder = WebApplication.CreateBuilder(args);
// 配置转发头选项
builder.Services.Configure<ForwardedHeadersOptions>(options =>
{
// 指定要处理的转发头
options.ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto;
// 可选:配置信任的代理服务器
options.KnownProxies.Add(IPAddress.Parse("192.168.1.100"));
options.KnownNetworks.Add(new IPNetwork(IPAddress.Parse("192.168.1.0"), 24));
// 可选:配置 X-Forwarded-For 和 X-Forwarded-Proto 的最大跳数
options.ForwardLimit = 2;
});
var app = builder.Build();
// 启用转发头中间件
app.UseForwardedHeaders();
// 其他中间件配置
app.UseRouting();
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
});
app.Run();
配置选项解释
ForwardedHeaders
:指定要处理的转发头。常见的转发头包括:ForwardedHeaders.XForwardedFor
:用于获取原始请求的客户端 IP 地址。ForwardedHeaders.XForwardedProto
:用于获取原始请求的协议(HTTP 或 HTTPS)。ForwardedHeaders.XForwardedHost
:用于获取原始请求的主机名。
KnownProxies
:指定信任的代理服务器列表。只有来自这些代理服务器的请求才会被处理转发头信息。KnownNetworks
:指定信任的网络范围。来自这些网络的请求也会被处理转发头信息。ForwardLimit
:设置 X-Forwarded-For 和 X-Forwarded-Proto 的最大跳数。这有助于防止伪造的转发头信息。
使用场景
- 负载均衡器:当应用程序部署在负载均衡器后面时,负载均衡器会将请求转发到应用程序。通过配置转发头,应用程序可以获取原始请求的客户端 IP 地址和协议信息,而不是负载均衡器的地址.
- 反向代理:在使用反向代理(如 Nginx 或 IIS)时,反向代理会将请求转发到应用程序。配置转发头可以确保应用程序获取正确的客户端信息.
注意事项
- 安全性:确保只信任可靠的代理服务器和网络,以防止伪造的转发头信息导致安全问题.
- 顺序:在中间件管道中,
UseForwardedHeaders
应该在UseRouting
和UseAuthentication
之前调用,以确保转发头信息在路由和认证之前被正确处理.
通过合理配置 ForwardedHeadersOptions
,你可以确保应用程序在使用代理服务器时能够获取正确的客户端信息,从而提高应用程序的安全性和可靠性.
分类:
.netcore
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· Obsidian + DeepSeek:免费 AI 助力你的知识管理,让你的笔记飞起来!
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
2023-01-06 数据库升级到2017版本
2023-01-06 SQL SERVER事务日志增长过快
2023-01-06 sql日志:获得数据库报错信息