使用 IIS7 应用程序请求路由修改标头

Posted

技术标签:

【中文标题】使用 IIS7 应用程序请求路由修改标头【英文标题】:Modifying headers with IIS7 Application Request Routing 【发布时间】:2010-12-23 00:12:01 【问题描述】:

我在 Tomcat 前使用 IIS7 应用程序请求路由来替代 ISAPI 重定向。基本的反向代理功能运行良好,但我在最终请求标头中没有足够的信息。我的应用程序存在于多个子域中:customerone.ourservice.com、customertwo.ourservice.com 等。每个子域运行相同的应用程序,但使用不同的品牌图形。

应用程序当前查看 Host 标头以判断要显示的品牌。当我使用 IIS7 反向代理时,该信息会丢失。我的标题现在是:

accept = text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
accept-charset = ISO-8859-1,utf-8;q=0.7,*;q=0.7
accept-encoding = gzip,deflate
accept-language = en-gb,en;q=0.7,en-us;q=0.3
cookie = JSESSIONID=......
host = 127.0.0.1:8080
max-forwards = 10
user-agent = Mozilla/5.0 (X11; U; Linux x86_64; en-GB; rv:1.9.0.15) Gecko/2009102815 Ubuntu/9.04 (jaunty) Firefox/3.0.15
x-original-url = /
x-forwarded-for = [iis7ip]:47567
x-arr-log-id = affbf81c-a5cf-4212-a43b-901cd9adcee6
connection = Keep-Alive

有什么方法可以将原始 Host 标头插入到反向代理传递的请求标头中?

【问题讨论】:

我现在不知道,但我注意到在我们的环境中,我们的标头被 IIS7 换成了 application/xhtml+xml,没有任何理由。 【参考方案1】:

应用程序请求路由有一个保留原始主机头的选项:preserveHostHeader。此选项默认为 false。您可以通过以下方式启用它:

"C:\Windows\System32\inetsrv\appcmd.exe" set config -section:system.webServer/proxy /preserveHostHeader:"True" /commit:apphost

【讨论】:

谢谢。我无法再对此进行测试(该应用程序在几个月前已停用),但您的回答看起来是正确的方法,我接受了。 +1 - 我在托管的 YouTrack 实例上遇到了类似的问题,这解决了 OpenID 登录不起作用的问题 任何人都知道为什么这只适用于 ApplicationHost.config 而不是每个人 web.config?? 请注意 appcmd.exe 位于 %systemroot%\system32\inetsrv\ 中(使用完整路径或将其添加到您的 Paths 变量中)更多关于这里iis.net/learn/get-started/getting-started-with-iis/… @StevendeSalas,这似乎是由于<section name="proxy" overrideModeDefault="Deny" allowDefinition="AppHostOnly" />——尤其是overrideModeDefault="Deny"部分。【参考方案2】:

您可以手动设置preserveHostHeader 标志。

    <proxy enabled="true" preserveHostHeader="true" />

</system.webServer>

在 iis 配置 gui 中,您可以在 system.webServer/proxy 下找到此值。

【讨论】:

我根据这个答案更新了这个位置的文件,但它没有用。然后我运行了这个命令 C:\Windows\System32\inetsrv>appcmd.exe set config -section:system.webServer/proxy /preserveHostHeader:"True" /commit:apphost 最终解决了这个问题。当你运行它时它会给出一个很好的反馈:在配置提交路径“MACHINE/WEBROOT/APPHOST”中应用配置更改到“MACHINE/W EBROOT/APPHOST”部分的“system.webServer/proxy”

以上是关于使用 IIS7 应用程序请求路由修改标头的主要内容,如果未能解决你的问题,请参考以下文章

iis7 https 发生413错误 未显示页面,因为请求实体过大

IIS7应用程序池集成和经典的区别

如何在我的 axios 发布请求中正确添加标头,发布路由在邮递员中有效,但在使用 axios 时无效

在IIS 7.x上启用没有应用程序请求路由(ARR)的反向代理

未应用 Istio 虚拟服务标头规则

路由与 URL 重写 (IIS7) 性能