关于 IIS 上 URL 重写+ARR 作为反代无法修改请求头的问题

2023-06-15 00:40:25 +08:00
 kujou
IIS 安装了 URL rewrite 和 ARR 。然后重写配置文件如下:

<configuration>
<system.webServer>
<rewrite>
<rules>
<rule name="ReverseProxyInboundRule1" stopProcessing="true">
<match url="(.*)" />
<action type="Rewrite" url="http://backserver/{R:1}" />
<serverVariables>
<set name="HTTP_UPGRADE" value="{$HTTP_UPGRADE}" />
<set name="HTTP_CONNECTION" value="upgrade" />
<set name="HTTP_HOST" value="{$HTTP_HOST}" />
</serverVariables>
</rule>
</rules>
</rewrite>
</system.webServer>
</configuration>

其实就相当于 nginx 里的

proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $http_host;

然而并不行。
按照 IIS 的官方文档,我这么写似乎没有问题...
但是后端直接打印输出,发现三个参数一个也没修改...
所以...问题出在哪?
645 次点击
所在节点    问与答
4 条回复
xbchaonba
2023-06-15 08:34:30 +08:00
我们公司也用 iis ,感觉好异类啊;
kujou
2023-06-15 09:05:22 +08:00
@xbchaonba ...你能想象我是自己主動選擇 IIS 的嗎....笑死...用了 IIS 然後用 php...最後想各種方法把 IIS 折騰的和 nginx 或者 apache 一樣...
Rache1
2023-06-15 10:06:18 +08:00
刚刚在我本地试了一下,没有问题,不过 value 里面是不需要 $ 的

<serverVariables>
<set name="HTTP_HOST" value="example.com" />
</serverVariables>


或者

<serverVariables>
<set name="HTTP_HOST" value="{HTTP_HOST}" />
</serverVariables>

另外,你还需要到这里添加一下 HTTP_HOST ,不然默认情况下是不能复写的,在规则命中后会报 500 错误。



kujou
2023-06-15 11:19:27 +08:00
@Rache1 剛剛我也試了一下...復現問題如下:
允許的變量:HTTP_Upgrade, HTTP_CONNECTION, HTTP_HOST, HTTP_COOKIE.
COOKIE 修改為 test123123 有效
剩下三個都無效...

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/948827

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX