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,你可以确保应用程序在使用代理服务器时能够获取正确的客户端信息,从而提高应用程序的安全性和可靠性.

posted @   yinghualeihenmei  阅读(13)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享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日志:获得数据库报错信息
点击右上角即可分享
微信分享提示