我有一个使用NetScaler负载均衡器的负载均衡Web服务器环境,该负载均衡器配置为添加标头HTTP_X_FORWARDED_PROTO。这是http / https,具体取决于请求。我知道这个标题是正确的。
我在IIS 8.5中创建了一个重写规则来设置SERVER_PORT和HTTPS服务器变量:
<rewrite>
<allowedServerVariables>
<add name="SERVER_PORT" />
<add name="HTTPS" />
</allowedServerVariables>
<globalRules>
<rule name="HTTPs Redirect">
<match url="(.*)" />
<conditions>
<add input="{ALL_HTTP}" matchType="Pattern"
pattern="HTTP_X_FORWARDED_PROTO:https" ignoreCase="true" />
</conditions>
<serverVariables>
<set name="SERVER_PORT" value="443" />
<set name="HTTPS" value="on" />
</serverVariables>
<action type="Redirect" url="https://{HTTP_HOST}/{R:1}" />
</rule>
</globalRules>
</rewrite>
然而标题似乎没有改变?我知道该规则正在运行,因为我添加了一个操作以重定向到google.com并且可以看到该工作正常。我有一个页面,显示所有服务器变量与此代码:
<%
foreach (string var in Request.ServerVariables)
{
Response.Write(var + " " + Request[var] + "<br />");
}
%>
我真的在这个墙上碰到了我的头,我在网上搜索和搜索,看不出它为什么不工作?
由于
路
答案 0 :(得分:0)
这可以通过在IIS用户界面中添加规则而不是直接在web.config中进行修复来解决。在IIS中添加允许的服务器变量并在IIS中重新创建规则后开始工作。我不知道它添加允许的服务器变量的位置,但它们不再在web.config中,并且它正在工作。