配置 Forwarded Headers Middleware
来自微软的说明:Configure ASP.NET Core to work with proxy servers and load balancers | Microsoft Learn。
通过该中间件,会更新:
HttpContext.Connection.RemoteIpAddress: 使用
X-Forwarded-For请求头的值. 其它的配置会影响到中间件如何设置RemoteIpAddress的值.消费掉的值会从
X-Forwarded-For中删除, 原始的值被设置到X-Original-For. 相同的处理模式也应用于其它请求头Host和Proto.HttpContext.Request.Scheme: 使用来自
X-Forwarded-Proto请求头的值设置.HttpContext.Request.Host: 使用来自
X-Forwarded-Host请求头的值.
该中间件不仅处理 Forwarded 请求头,还提供了额外的安全措施。
KnownNetworks 和 KnownProxies 表示有效的中间件地址,如果配置了 KnownNetworks 或者 KnownProxies,则该中间件仅仅处理列出在 KnownNetworks 和 KnownProxies 中的地址,而会忽略掉其它的地址。
ForwardLimit 则限制了处理的地址数量,这意味着不是所有列出在请求头中的地址都一定被处理。
默认配置
- 在应用和客户端之间仅一个代理存在
- 只有 loopback 地址作为已知代理地址和已知的网络范围
- forwarded 请求头的名称为 X-Forwarded-For 和 X-Forwarded-Proto
- 默认的 Forwardedheaders 的值为 ForwardedHeaders.None,意味着不处理,必须通过配置它来启用中间件。
See: Configure ASP.NET Core to work with proxy servers and load balancers | Microsoft Learn
配置示例
下面的示例中,最多检查 2 个元素,支持的代理服务器是 127.0.0.1 和 127.0.10.1,Forwarded For 的请求头名称使用的是自定义的 X-Forwarded-For-My-Custom-Header-Name。
builder.Services.Configure<ForwardedHeadersOptions>(options => {
options.ForwardLimit = 2;
options.KnownProxies.Add(IPAddress.Parse("127.0.10.1"));
options.ForwardedForHeaderName = "X-Forwarded-For-My-Custom-Header-Name";
});
常用配置说明
KnownNetworks
用来表示有效的网段集合。
它是一个集合类型,其中的元素类型为 IPNetwork.
public System.Collections.Generic.IList
<Microsoft.AspNetCore.HttpOverrides.IPNetwork> KnownNetworks { get; }yb
这个 IPNetwork 表示一个网段。
这是它的构造函数,可以看到它通过一个前缀的长度来指定网段。
public IPNetwork(IPAddress prefix, int prefixLength)
:this(prefix, prefixLength, true)
{
}
例如,默认的配置代码如下:
public IList<IPNetwork> KnownNetworks { get; }
= new List<IPNetwork>() {
new IPNetwork(IPAddress.Loopback, 8)
};
表示只要是 127.x.x.x 的网段,8 指的是 8 位,即第一个字节。也就是 127 所在的部分。
KnownProxies
表示有效的代理集合,其中的元素类型为 IpAddress,即单个的网络地址。
例如,默认的配置代码如下:
public IList<IPAddress> KnownProxies { get; }
= new List<IPAddress>() {
IPAddress.IPv6Loopback
};
ForwardLimit
限制中间件处理的在 X-Forwarded- 中的地址数量,默认为 1 个。
默认的配置如下:
public int? ForwardLimit { get; set; } = 1;
通过设置为 null 可以禁用该限制,但是这必须在配置了 KnownProxies 和 KnownNetworks 之后。配置为非 null 的值是一种安全预防措施 (但不是保证),用来防止配置错误的代理,和来自网络上游的恶意请求。
处理的顺序是从右向左的相反顺序进行的,如果使用默认值 1,则仅仅处理请求头中最右边的值。
配置 Forwarded Headers Middleware的更多相关文章
- 翻译 - ASP.NET Core 基本知识 - 中间件(Middleware)
翻译自 https://docs.microsoft.com/en-us/aspnet/core/fundamentals/middleware/?view=aspnetcore-5.0 中间件是集成 ...
- ASP.NET Core 中使用负载均衡时获取客户端 IP
在使用负载均衡的情况下,通过 context.Connection.RemoteIpAddress 获取到的是负载均衡的 IP 地址,需要通过 X-Forwarded-For 请求头才能获取到客户端的 ...
- 翻译 - ASP.NET Core 托管和部署 - 在 Linux 上使用 Nginx 托管 ASP.NET Core 网站
翻译自 https://docs.microsoft.com/en-us/aspnet/core/host-and-deploy/linux-nginx?view=aspnetcore-5.0 本文介 ...
- 翻译 - ASP.NET Core 基本知识 - 通用主机 (Generic Host)
翻译自 https://docs.microsoft.com/en-us/aspnet/core/fundamentals/host/generic-host?view=aspnetcore-5.0 ...
- 温故知新,.Net Core利用UserAgent+rDNS双解析方案,正确识别并反爬虫/反垃圾邮件
背景 一般有价值的并保有数据的网站或接口很容易被爬虫,爬虫会占用大量的流量资源,接下来我们参考历史经验,探索如何在.Net Core中利用UserAgent+rDNS双解析方案来正确识别并且反爬虫. ...
- Kestrel web server implementation in ASP.NET Core
https://docs.microsoft.com/en-us/aspnet/core/fundamentals/servers/kestrel?tabs=aspnetcore1x&view ...
- asp.net core 系列之Reponse caching 之 Response Caching Middleware(4)
这篇文章介绍 Response Caching Middleware . Response Caching Middleware in ASP.NET Core 通过在ASP.NET Core应用中 ...
- [ASP.NET Core] Middleware
前言 本篇文章介绍ASP.NET Core里,用来处理HTTP封包的Middleware,为自己留个纪录也希望能帮助到有需要的开发人员. ASP.NET Core官网 结构 在ASP.NET Core ...
- Django Middleware简介
1 前言 Django使用非常熟练了,各种API接口不在话下,全都搞定.为方便定位问题在每个API接口的的开始和返回的地方都加上了log打印,记录入参和返回值. 但是这样有一个问题,需要每个 ...
- SpringCloud系列五:Ribbon 负载均衡(Ribbon 基本使用、Ribbon 负载均衡、自定义 Ribbon 配置、禁用 Eureka 实现 Ribbon 调用)
1.概念:Ribbon 负载均衡 2.具体内容 现在所有的服务已经通过了 Eureka 进行了注册,那么使用 Eureka 注册的目的是希望所有的服务都统一归属到 Eureka 之中进 行处理,但是现 ...
随机推荐
- 墨天轮最受DBA欢迎的数据库技术文档-SQL优化篇
[墨天轮最受欢迎的技术文档]系列文章得到了很多朋友的支持,大家也告诉了我们期待看到的主题这不!大家想看的优化系列-SQL优化篇来啦~原文文末送墨值中,欢迎大家参与! 数据库的调优被分成多个阶段,每个阶 ...
- webpack 的优点
1. 社区庞大,活跃,紧跟技术的前言,不断发展迭代 : 2. 专注处理模块化的项目,可以开箱即用 : 3. 通过 loader 扩展,可以把所有类型的文件解析打包 : 4. 通过plugin 扩展 , ...
- 查找大量时序遥感文件缺失、不连贯的成像日期:Python代码
本文介绍批量下载大量多时相的遥感影像文件后,基于Python语言与每一景遥感影像文件的文件名,对这些已下载的影像文件加以缺失情况的核对,并自动统计.列出未下载影像所对应的时相的方法. 批量下载 ...
- 【2024】所有人都能看懂的 Win 11 安装/重装教程,跟着我一遍包成功
无论你因为系统坏掉想重装一下 Windows,或者只是想升级一下 Windows 都可以.虽然标题写的是 Win 11,不过实际上对于任何 Windows 系统都适用,不过现在 Win 11 已经相当 ...
- AutoDarkMode:Win上自动切换深浅模式的工具
AutoDarkMode是一款Windows上用于根据时间自动切换亮暗主题的工具. 打开后,即可设置根据时间(通常是白天亮晚上暗)自动切换主题(需要软件开机启动). 你也可以在切换颜色主题的同时设置两 ...
- manim边做边学--复数平面
所谓复数平面,就是一种二维坐标系统,用于几何表示复数的场景,其中横轴代表实部,纵轴代表虚部. 每个点对应一个唯一的复数,反之亦然,这种表示方法使得复数的加法.乘法等运算可以通过直观的图形变换来理解. ...
- Linux基础-查看和设置环境变量
一,查看环境变量 二,环境变量类型 三,设置环境变量 四,参考资料 一,查看环境变量 在 Linux中,环境变量是一个很重要的概念.环境变量可以由系统.用户.Shell 以及其他程序来设定,其是保存在 ...
- typescript 编译报错 不能用于索引类型
Element implicitly has an 'any' type because expression of type 'any' can't be used to index type 't ...
- 非加密哈希函数库-SpookyHash
地址: https://burtleburtle.net/bob/hash/spooky.html SpookyHash is a public domain noncryptographic has ...
- 4-11.3 C++中的显式类转换
目录 static_cast 1.用来改变基本类型:一般是高精度转低精度 2.恢复void* 指针类型 const_cast 用来去除底层const(low-level const) reinterp ...