.net-core - dotnet core 3 未在 IIS 上读取 X-FORWARDED-HOST
问题描述
我有一个新的 dotnet 核心 MVC 应用程序,它位于未读取 X-FORWARDED-HOST 标头的 ARR IIS 代理后面。
具体来说,我需要正确设置主机,因为我正在使用 openID Connect,并且它需要编写正确的重定向 URL。
它适用于我的 VS 开发服务器,但不适用于我的登台服务器。
现在所有代码都使用 example.com 来替换我的真实域。
启动.cs
var forwardingOptions = new ForwardedHeadersOptions()
{
ForwardedHeaders = ForwardedHeaders.All,
AllowedHosts = new List<string> { "*.example.com"},
RequireHeaderSymmetry = false
};
app.UseForwardedHeaders(forwardingOptions);
控制器:
var ret = new StringBuilder();
foreach (var header in Request.Headers)
{
ret.AppendLine(header.Key + ":" + header.Value);
}
return Content(Request.Host + "\r\n"+ret.ToString());
输出测试(编辑删除不相关的标题)
pc023835.example.com
Host:pc023835.example.com
X-Original-Host:localhost:53848
X-FORWARDED-PORT:443
暂存 IIS:
web-test.example.com
Host:web-test.example.com
X-FORWARDED-HOST:newdev.example.com
X-FORWARDED-PORT:443
X-FORWARDED-PROTO:https
X-Original-URL:/file-downloader/
X-Forwarded-For:10.101.40.1:10400
X-ARR-SSL: EDITED OUT
X-ARR-LOG-ID:d2224167-c14f-43e0-af40-86bfd360d22f
重写规则:
<rule name="ReverseProxyInboundRule1" enabled="true" stopProcessing="true">
<match url="^file-downloader/(.*)" />
<action type="Rewrite" url="https://web-test.example.com/file-downloader/{R:1}" />
<serverVariables>
<set name="HTTP_X_FORWARDED_HOST" value="{HTTP_HOST}" />
<set name="HTTP_X_FORWARDED_PORT" value="443" />
<set name="HTTP_X_FORWARDED_PROTO" value="https" />
</serverVariables>
</rule>
解决方案
推荐阅读
- c# - sql select group by int()
- mongodb - 将特定的 Confluence 页面连接到 Mongo DB
- javascript - 从 foreach 推入数组并使其在 foreach 外部可用
- java - 检测LibGdx中文本点击的方法
- python - 如何使用python在HTML中制作动态表格
- ios - TabBar 更改选定的背景颜色
- python - ValueError: 操作数不能与形状 (8,) (2,) Curve_fit() 一起广播
- java - MongoDB 找到一个特定的文档?
- api - 使用 Sitecore JSS 的 API 安全性
- sql-server - 如何在 between 子句中使用 varchar 日期字段 - SQL Server 2012