服务器变量未设置

时间:2015-04-09 10:03:39

标签: iis rewrite load-balancing

我有一个使用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 />");
}

%>

我真的在这个墙上碰到了我的头,我在网上搜索和搜索,看不出它为什么不工作?

由于

1 个答案:

答案 0 :(得分:0)

这可以通过在IIS用户界面中添加规则而不是直接在web.config中进行修复来解决。在IIS中添加允许的服务器变量并在IIS中重新创建规则后开始工作。我不知道它添加允许的服务器变量的位置,但它们不再在web.config中,并且它正在工作。