Lia*_*yan 3 iis rewrite reverse-proxy arr
我正在尝试使用 ARR 和 urlrewrite 部署 jetty servlet 来创建反向代理。如果我启用“在响应标头中反向重写主机”,那么一切似乎都工作正常。我通过 www.example.com/servlet 访问 servlet,该地址在浏览器中保持不变,但通过 localhost:8080 访问 servlet。
问题是该 servlet 根据 get 参数返回 302 重定向。例如,如果我访问 www.example.com/servlet?input=cleaning 那么我将得到一个 302 重定向,该重定向可能会访问 www.cleaningexample.com/howtoclean。反向重写主机规则意味着客户端不会看到此 url,而是返回 www.example.com/howtoclean。
我无法设置静态出站规则,因为我事先不知道 302 重定向可能返回哪个地址。
如果我禁用反向重写主机,则浏览器中的 URL 将从 www.example.com/servlet 更改为 localhost:8080/servlet。
我尝试替换出站规则中的主机,但找不到任何地方可以获取 servlet 返回的原始位置标头,以替换重写的位置主机。
有没有办法让它正常工作?
你有没有弄清楚这一点?我有完全相同的问题。我无法让这两种情况都正确运行。要么我选中该框,302 重定向会覆盖响应位置标头并且永远无法工作,要么我取消选中该框并且 HOST 标头是 localhost,因此应用程序无法完全工作。
就像那个复选框需要更聪明一点,并说“如果不是 302,则执行此操作”。或者我必须在之前和之后添加规则,但我认为这是不可能的。:-(
---- 20分钟后,很幸运,找到了答案。
%windir%\system32\inetsrv\appcmd.exe set config -section:system.webServer/proxy -preserveHostHeader:true /commit:apphost
该命令加上响应标头 UNCHECKED 中的反向重写主机似乎有效。外部重定向在未选中该框的情况下工作,并且使用该命令保留主机,下游应用程序不再在浏览器地址栏中看到 localhost:8080 而是看到原始主机。两者都有效!
滑稽的是,UI 中没有 keepHostHeader 的选项。他们只是从未添加复选框。:) 如果您进入控制面板中的“配置编辑器”,您可以在 xml 架构中看到它。所以这是合法的,只是他们在用户界面选项中错过了它。:(
| 归档时间: |
|
| 查看次数: |
5944 次 |
| 最近记录: |