首页 > 其他分享 >builder.Services.Configure<ForwardedHeadersOptions>

builder.Services.Configure<ForwardedHeadersOptions>

时间:2025-01-06 15:37:08浏览次数:1  
标签:Configure builder 应用程序 ForwardedHeaders 代理服务器 转发 Services app 请求

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

标签:Configure,builder,应用程序,ForwardedHeaders,代理服务器,转发,Services,app,请求
From: https://www.cnblogs.com/Dongmy/p/18655456

相关文章

  • builder.WebHost.ConfigureKestrel
    在ASP.NETCore中,builder.WebHost.ConfigureKestrel方法允许你配置Kestrel服务器的选项。通过这个方法,你可以根据应用程序的需求来调整Kestrel的各种设置,包括请求体大小限制、连接限制、性能调优等。以下是如何在ConfigureKestrel中配置MaxRequestBodySize的示例:csh......
  • builder.Services.Configure<FormOptions>
    在ASP.NETCore中,builder.Services.Configure<FormOptions>(o=>{...})用于配置表单选项(FormOptions),这些选项控制着MVC控制器如何处理表单提交。FormOptions提供了一些重要的设置,可以帮助你控制表单数据的大小和复杂性,以防止潜在的安全问题,如拒绝服务攻击(DoS)或内存溢出。......
  • builder.Services.AddControllersWithViews
    在ASP.NETCore中,builder.Services.AddControllersWithViews是一个用于配置应用程序以支持MVC(Model-View-Controller)模式的扩展方法。它通常在应用程序的启动配置文件中使用,例如Program.cs或Startup.cs。这个方法的作用是注册MVC控制器和视图所需的依赖项和服务。在ASP......
  • 复杂对象的创建与组装 - 建造者模式(Builder Pattern)
    建造者模式(BuilderPattern)建造者模式(BuilderPattern)建造者模式(BuilderPattern)概述建造者模式结构图代码talkischeap,showyoumycode总结建造者模式(BuilderPattern)建造者模式(BuilderPattern)是一种创建型设计模式,它允许你分步骤构建复杂对象。该模式将一个......
  • uniapp(Hbuilderx)
    目录微信开发者工具下载新建项目运行微信开发者工具下载新建项目注意点如果要打包安卓,需要勾上:运行微信小程序1:找到.exe路径,粘贴进去2:打开微信小程序“服务端口”......
  • uniapp - 解决安卓APP运行到真机显示未检测到手机或模拟器,HBuilderX真机调试未检测到
    前言关于此问题网上的教程都无法解决,如果您的情况与我相似,即可解决。在uniappApp项目开发中,解决开发app运行到真机时显示“没有检查到设备”将项目运行到Android手机真机调试却检测不到,实际上已经插上USB数据线了,也开启进入了开发者模式怎么调也识别不到,非常恶心的......
  • 【科技前沿】零代码构建台风监测大屏:Experience Builder赋能风云气象卫星(FY-4A)应用
    本教程首发于极思课堂,极思课堂(极思课堂-GeoSceneOnline)是易智瑞信息技术有限公司面向公司客户、合作伙伴、GIS从业者、高校教师与学生以及热衷于GIS技术的极客们打造的一站式GIS前沿技术学习平台。欢迎大家访问、学习与关注。课程原文链接:极思课堂-GeoSceneOnlinehttp......
  • 执行yum命令时报 One of the configured repositories failed
    报错如下:Oneoftheconfiguredrepositoriesfailed(CentOS-7-Base),andyumdoesn'thaveenoughcacheddatatocontinue.Atthispointtheonlysafethingyumcandoisfail.Thereareafewwaystowork"fix"this:1.Contacttheup......
  • 从0开始学uniapp——认识HBuilderX
    为什么使用uniapp:可以多端运行,写好了这一套可以用在h5,安卓程序,小程序多端,很方便。 1.百度搜HBuilderX,使用该编译器学习uniapp2.新建一个默认项目pages——用于存放页面,这里都是.vue后缀的页面,pages.json——用于存放路由pages数组里按例子添加即可, HBuilderX提供一个很方......
  • 已解决Cannot find cache named ‘XXX‘ for Builder
    已解决Cannotfindcachenamed‘XXX‘forBuilder|Id|Title|DateAdded|SourceUrl|PostType|Body|BlogId|Description|DateUpdated|IsMarkdown|EntryName|CreatedTime|IsActive|AutoDesc|AccessPermission||-------------|-------------|----......