配置 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 之中进 行处理,但是现 ...
随机推荐
- 深度DFS 和 广度BFS搜索算法学习
目录 广度优先的动态图 深度优先的动态图 广度和深度的具体步骤 深度和广度的应用场景 图的两种遍历方式: 深度优先遍历(DFS--Depth First Search) 广度优先遍历(BFS--Bre ...
- 墨天轮最受DBA欢迎的数据库技术文档-SQL优化篇
[墨天轮最受欢迎的技术文档]系列文章得到了很多朋友的支持,大家也告诉了我们期待看到的主题这不!大家想看的优化系列-SQL优化篇来啦~原文文末送墨值中,欢迎大家参与! 数据库的调优被分成多个阶段,每个阶 ...
- 使用AndroidStudio开发cocos2d-x,以及可能会出现的问题
1. 使用AndroidStudio开发cocos2d-x流程 1.1 通过cocos2d-x官网(https://www.cocos.com/)下载cocos2d-x文件 1.2 安装python环 ...
- 妙用编辑器:使用Notepad--列编辑功能批量生成维护命令
应用场景 在日常工作中,维护人员可能会要批量生成一些配置命令,示例如下:添加12个分组 ADD GROUP:GID=1,FCN=646322; ADD GROUP:GID=1,FCN=646322; ...
- Nuxt.js 应用中的 modules:done 事件钩子详解
title: Nuxt.js 应用中的 modules:done 事件钩子详解 date: 2024/10/16 updated: 2024/10/16 author: cmdragon excerp ...
- 带你一起看看nginx如何部署安装
nginx部署安装 Linux安装 源码构建Nginx 管理器安装 windows安装 首先需要下载Nginx软件包 nginx软件官方下载地址: nginx官方下载连接 建议选择稳定的软件版本,如果 ...
- P2540 [NOIP2015 提高组] 斗地主 加强版
简要题意 给你一副手牌,求最少的次数出完所有手牌.(按照它给出的规定出) 题目 分析 因为求最小次数直接贪心很明显是错的,但又直接写不出 \(dp\) 的式子,所以我们只能够爆搜所有情况,但这样明显会 ...
- 2024/9/16 CSP-S模拟赛试题
A 这题是很有意思的一个题,思路就是你考虑kt的位置只可能在四个角,因为这种情况下,他的距离才会最远对吧,所以你就暴力找另一个人fengwu的点的位置,然后计算他们之间的距离然后你求一个\(\max\ ...
- 本文是第一篇在GitHub仓库中撰写的.md格式的blog文件
正文内容: 具体内容,只是未来测试,给出福利: 模板格式: title: 博文标题 description: 博文摘要 #多个标签请使用英文逗号分隔或使用数组语法 tags: 标签1, 标签2 #多个 ...
- 5.9 Linux Vim批量注释和自定义注释
使用 Vim 编辑 Shell 脚本,在进行调试时,需要进行多行的注释,每次都要先切换到输入模式,在行首输入注释符#再退回命令模式,非常麻烦. 连续行的注释其实可以用替换命令来完成.换句话说,在指定范 ...