我有一个 IIS 服务器 [在 WinServer 2016 上],它充当一些 Kestrel Web 服务器的反向代理。现在我正在尝试设置 IIS 以转发所有 X-Forwarded-* 标头。对于 X-Forwarded-For 和 X-Forwarded-Proto 标头,一切正常,但不适用于 X-Forwarded-Host。
这是服务器级别的“允许的服务器变量”:
这是我在调试器中看到的,当 HTTP 请求命中 Kestrel 网络服务器时
不幸的是,我无法从 PROD 服务器创建转储,但由于一些功能无法正常工作,情况应该类似于 DEV 环境。
在阅读了几篇关于如何将 IIS 设置为反向代理的文章后,我的印象是所有 X-Forwarded-* 标头都应该自动添加。或者,XFH 是一个例外,我需要手动设置它吗?
我将不胜感激任何形式的帮助!
小智 6
我终于从 GitHub 的问题中弄清楚了这一点。我试图设置两者X-Forwarded-Host和Host标题,但两者都无法工作:
来自https://github.com/maptiler/tileserver-gl/issues/119
IIS 中的解决方法是强制 IIS 不更改主机标头。
Run Code Online (Sandbox Code Playgroud)\Windows\System32\inetsrv\appcmd.exe set config -section:system.webServer/proxy -preserveHostHeader:true /commit:apphost
您还可以从 UI 执行此操作:
将 system.webServer/proxypreserveHostHeader 设置为 True
一旦我设置了这个并重新启动服务器,变量就被正确设置,并且我进行反向代理的 Flask 应用程序被重定向到正确的 URL(而不是localhost:8050)。
希望这对某人有帮助。我花了无数的时间试图让它发挥作用。
小智 5
这花了我一段时间才弄清楚。IIS 与其服务器变量的工作方式存在一些奇怪之处,请参见下文:
您必须在 InetMgr GUI 中定义变量,我发现尝试仅使用 web.config 进行指定,服务器将返回 500 个内部服务器错误,直到添加为止。(您已经完成了此操作,因此此处无需更改。)
必须为请求分配一个动态值或每个请求的静态值。这是在 web.config 中执行的:
如果您想复制并粘贴:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<rewrite>
<rules>
<rule name="ReverseProxyInboundRule1" enabled="true" stopProcessing="true">
<match url="(.*)" />
<action type="Rewrite" url="http:/example.com/{R:1}" />
<serverVariables>
<set name="ORIGINAL_HOST20" value="{HTTP_HOST}" />
<set name="HTTP_X_FORWARDED_PROTO" value="https" />
<set name="HTTP_X_FORWARDED_PORT" value="443" />
<set name="HTTP_X_FORWARDED_HOST" value="example.com" />
</serverVariables>
</rule>
</rules>
</rewrite>
<httpErrors errorMode="DetailedLocalOnly" />
<directoryBrowse enabled="false" />
</system.webServer>
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助!
| 归档时间: |
|
| 查看次数: |
12608 次 |
| 最近记录: |