IIS 10.0 反向代理与 ARR 和 URL 重写导致 ERR_TOO_MANY_REDIRECTS 仅在 HTTP 上
IIS 10.0 Reverse Proxy with ARR and URL rewrite causing ERR_TOO_MANY_REDIRECTS only on HTTP
我有一个 IIS 服务器托管一些外部域和一个内部 Web 应用程序,我还有一个位于 apache 服务器上的 woocommerce 网站。 IIS 服务器位于一个固定的 public IP 地址上,Apache 服务器也位于另一个固定的 public IP 地址上。所有基础设施都在内部。我们很快将放弃 /29 网络,转而使用单个固定 IP /32 网络。我计划使用 ARR 和 URL 重写以使 IIS 和 Apache 服务器都使用 1 个固定的 public IP。
我在 IIS 机器上安装了 ARR 并配置了以下 web.config,请注意,IIS 机器和 Apache 机器都有有效的证书。
<configuration>
<system.webServer>
<rewrite>
<outboundRules>
<rule name="ReverseProxyOutboundRule1" preCondition="ResponseIsHtml1">
<match filterByTags="A, Form, Img" pattern="^http(s)?://192.168.8.100/(.*)" />
<action type="Rewrite" value="http{R:1}://test.example.com/{R:2}" />
</rule>
<preConditions>
<preCondition name="ResponseIsHtml1">
<add input="{RESPONSE_CONTENT_TYPE}" pattern="^text/html" />
</preCondition>
</preConditions>
</outboundRules>
<rules>
<clear />
<rule name="ReverseProxyInboundRule1" stopProcessing="true">
<match url="(.*)" />
<conditions>
<add input="{CACHE_URL}" pattern="^(https?)://" />
</conditions>
<action type="Rewrite" url="{C:1}://192.168.8.100/{R:1}" />
</rule>
</rules>
</rewrite>
</system.webServer>
</configuration>
192.168.8.100 是在 Apache 上托管 woocommerce 的内部服务器。所以这之后的工作是 https://test.example.com works fine reverse proxied to appache from IIS, test.example.com also works fine. However http://test.example.com 失败 ERR_TOO_MANY_REDIRECTS 我可以看到使用 fidler.
我尝试过的东西
在 ARR 中关闭 'Reverse rewrite host in response headers',这将停止过多的重定向,但将主机显示为 192.168.8.100 地址并且显然无法通过证书,但是 woocommerce 网站正常运行。
在 /etc/apache2/sites-available/wordpress.conf 中将 HTTP 到 HTTPS 的重写规则添加到 Apache - 这对重定向错误过多没有影响。
在位于 /var/www/wordpress/.htaccess 的 .HTACCESS 文件中添加 HTTP 到 HTTPS 的重定向规则 - 这对重定向错误过多没有影响。
从 Wordpress 中删除 Really Simple SSL 插件 - 这对重定向错误过多没有影响。
对于现在要尝试什么,我已经束手无策了。
回答我自己的问题,这是一个小学生错误,当我尝试 IIS HTTP --> (HTTPS) 重写时,我忘记将它移到反向代理规则之前,因此它永远不会去执行它。向上移动,一切正常。呸!
我有一个 IIS 服务器托管一些外部域和一个内部 Web 应用程序,我还有一个位于 apache 服务器上的 woocommerce 网站。 IIS 服务器位于一个固定的 public IP 地址上,Apache 服务器也位于另一个固定的 public IP 地址上。所有基础设施都在内部。我们很快将放弃 /29 网络,转而使用单个固定 IP /32 网络。我计划使用 ARR 和 URL 重写以使 IIS 和 Apache 服务器都使用 1 个固定的 public IP。
我在 IIS 机器上安装了 ARR 并配置了以下 web.config,请注意,IIS 机器和 Apache 机器都有有效的证书。
<configuration>
<system.webServer>
<rewrite>
<outboundRules>
<rule name="ReverseProxyOutboundRule1" preCondition="ResponseIsHtml1">
<match filterByTags="A, Form, Img" pattern="^http(s)?://192.168.8.100/(.*)" />
<action type="Rewrite" value="http{R:1}://test.example.com/{R:2}" />
</rule>
<preConditions>
<preCondition name="ResponseIsHtml1">
<add input="{RESPONSE_CONTENT_TYPE}" pattern="^text/html" />
</preCondition>
</preConditions>
</outboundRules>
<rules>
<clear />
<rule name="ReverseProxyInboundRule1" stopProcessing="true">
<match url="(.*)" />
<conditions>
<add input="{CACHE_URL}" pattern="^(https?)://" />
</conditions>
<action type="Rewrite" url="{C:1}://192.168.8.100/{R:1}" />
</rule>
</rules>
</rewrite>
</system.webServer>
</configuration>
192.168.8.100 是在 Apache 上托管 woocommerce 的内部服务器。所以这之后的工作是 https://test.example.com works fine reverse proxied to appache from IIS, test.example.com also works fine. However http://test.example.com 失败 ERR_TOO_MANY_REDIRECTS 我可以看到使用 fidler.
我尝试过的东西
在 ARR 中关闭 'Reverse rewrite host in response headers',这将停止过多的重定向,但将主机显示为 192.168.8.100 地址并且显然无法通过证书,但是 woocommerce 网站正常运行。
在 /etc/apache2/sites-available/wordpress.conf 中将 HTTP 到 HTTPS 的重写规则添加到 Apache - 这对重定向错误过多没有影响。
在位于 /var/www/wordpress/.htaccess 的 .HTACCESS 文件中添加 HTTP 到 HTTPS 的重定向规则 - 这对重定向错误过多没有影响。
从 Wordpress 中删除 Really Simple SSL 插件 - 这对重定向错误过多没有影响。
对于现在要尝试什么,我已经束手无策了。
回答我自己的问题,这是一个小学生错误,当我尝试 IIS HTTP --> (HTTPS) 重写时,我忘记将它移到反向代理规则之前,因此它永远不会去执行它。向上移动,一切正常。呸!