iis - 如何在重写期间强制 IIS 为 http 主机标头使用特定值
问题描述
我正在尝试创建一个重写规则,将网站配置为用作反向代理,但我在将主机 http 标头设置为与重写中使用的域不同的预定义值时遇到了一些问题(目标是使用 IIS 作为反向代理,将 URL 转发到具有自定义主机值的 sendgrid)。
为了说明问题,我使用绑定 url.com 和 sendgrid.net 创建了 2 个名为 url 和 sendgrid 的网站(我在 hosts 文件中为这些名称添加了自定义条目,以便解析名称) . 现在,我需要将在 url 网站上收到的所有请求重定向到 sendgrid 网站,确保对 sendgrid 网站的请求将主机 http 标头设置为 url.com。我首先向 url 网站添加了一个重写规则,如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<rewrite>
<rules>
<rule name="ReverseProxyInboundRule1" stopProcessing="true">
<match url="(.*)" />
<conditions>
<add input="{CACHE_URL}" pattern="^(https?)://" />
</conditions>
<action type="Rewrite" url="http://sendgrid.net/{R:1}" logRewrittenUrl="true" />
<serverVariables>
<set name="HTTP_HOST" value="url.madeira.gov.pt" />
</serverVariables>
</rule>
</rules>
</rewrite>
</system.webServer>
</configuration>
applicationhost.config 文件也已更新,因此可以更改 HTTP_HOST:
<location path="url">
<system.webServer>
<rewrite>
<allowedServerVariables>
<add name="HTTP_HOST" />
</allowedServerVariables>
</rewrite>
</system.webServer>
</location>
为了查看发生了什么,我激活了失败的请求跟踪,我注意到通过前面的规则定义的主机头文件没有应用。我可以看到已经处理了规则并且处理了 HTTP_HOST 标头(SET_SERVER_VARIABLE),但是当请求被重写时,它总是将 http 主机设置为 sendgrid.net(而不是将其设置为 url.com):
那么,当 IIS 网站配置为用作反向代理时,有没有办法强制对主机标头使用特定值?
解决方案
推荐阅读
- java - 使用 JAVA 中的脚本创建一个反应应用程序
- python - What is the correct way to import modules when I'm writing my own module in python?
- selenium - Testcontainers Selenium 如何更新浏览器?
- python-3.x - 我想编写一个接受数字作为字符串的代码
- python - 如何在 Python 中向 matplotlib.annotate 添加百分比符号?
- r - 更改R中注释的字体大小
- c# - GDI+ 中出现一般错误。在保存压缩的 img 时,Microsoft 的代码片段是否有问题
- c# - 读取大型 CSV 文件的更快方法
- angular - 无法加载 PDF 文档 - Angular 8
- javascript - vanilla JS函数中的回调并不总是有效?