首页 > 解决方案 > 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>

标签: .net-core.net-core-3.1

解决方案


推荐阅读