我有一个负载均衡器监听端口 80 和 443,但由于安全策略,负载均衡器和 Web 服务器之间的流量必须加密。我正在尝试生成从 http 到 https 的重定向,但通常的方法不起作用,大概是因为 IIS 无法区分 http 和 https 上的原始请求之间的区别。这是因为当请求到达 Web 服务器时,它已经加密并通过端口 443 传输。
现在我正在使用带有 mods 的重写模块到 web.config,并且重定向适用于 80->LB->80 流量,但不适用于 80->LB->443 流量。
这是我的 web.config:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<rewrite>
<rules>
<rule name="HTTP to HTTPS redirect" stopProcessing="true">
<match url="(.*)" />
<conditions>
<add input="{HTTPS}" pattern="off" ignoreCase="true" />
</conditions>
<action type="Redirect" redirectType="Found" url="https://{HTTP_HOST}/{R:1}" />
</rule>
</rules>
</rewrite>
</system.webServer>
</configuration>
请注意,我喜欢 web.config 解决方案(如果它可以修改为适用于 80->LB->443)的一点是重定向也适用于非 ASP.NET 页面。
有什么想法吗?
最佳答案
我相信您可以设置负载平衡器来执行从 http 到 https 的重定向。您还可以设置负载平衡器以发送额外的 HTTP header 或 CGI 变量来指示安全与非安全。
关于HTTP 到 HTTPS 重定向到端口 443 上的负载均衡器后面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9590975/