我有一个IIS服务器(在WinServer 2016上),它充当几个Kestrel Web服务器的反向代理。 现在我正在尝试设置IIS来转发所有的X-Forwarded- *标头。 对于X-Forwarded-For和X-Forwarded-Proto头文件,一切正常,但不适用于X-Forwarded-Host。
这是服务器级别的“允许的服务器variables”:
这是我在debugging器中看到的,当HTTP请求命中Kestrelnetworking服务器
不幸的是我不能从PROD服务器创build转储,但是由于一些function不能正常工作,所以情况应该与DEV环境类似。
在阅读了关于如何将IIS设置为反向代理的一些文章之后,我得到了一个所有的X-Forwarded- *头文件应该被自动添加的印象。 或者,XFH是一个例外,我需要手动设置它?
我将非常感激任何forms的帮助!
这花了我一段时间才弄清楚。 IIS与服务器variables的工作方式有一些奇怪的地方,如下所示:
您必须在InetMgr GUI中定义variables,我发现试图只使用web.config来指定,服务器将返回500内部服务器错误,直到它被添加。 (你已经这样做了,所以没有什么可以改变的。)
必须分配对请求dynamic的值或每个请求的静态值。 这是在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>
希望这可以帮助!