<allowedservervariables>标记应该放在Azure网站applicationHost.config中的哪个位置?

时间:2016-02-25 17:37:08

标签: azure iis url-rewriting reverse-proxy

技术信息

方案

我已在Azure Website上实施了反向代理,但是接收服务器没有得到初始请求是否超过Azure Website的任何指示。

我想要做的是通过自定义HTTPS将初始请求中的HTTPS标记从ON/OFF发送到代理服务器。

理论

  • 使用shibayanIIS Manager Site Extension,我可以修改HTTP Header文件,为其添加转换以插入applicationHost.xdt标记,这样我就可以设置自定义<allowedServerVariables>

实践

我已经配置了我的重写规则:

HTTP Header

并尝试了一些组合<rule name="Proxy" stopProcessing="true" xdt:Transform="Replace" xdt:Locator="Match(name)"> ... <serverVariables> <set name="HTTP_X_USE_HTTPS" value="{HTTPS}" /> </serverVariables> ... </rule> 标记的位置......

尝试一次:

this answer中所述。

<serverVariables>

结果:

  

HTTP错误500.50 - 网址重写模块错误。

     

不允许设置服务器变量“HTTP_X_USE_HTTPS”。加   服务器变量名称为允许的服务器变量列表。

尝试两个:

<?xml version="1.0" encoding="utf-8"?>
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
  <system.webServer>
    <proxy enabled="true" preserveHostHeader="false" reverseRewriteHostInResponseHeaders="false" xdt:Transform="Insert" />
    <rewrite>
      <allowedServerVariables>
        <add name="HTTP_X_USE_HTTPS" xdt:Transform="Insert" />
      </allowedServerVariables>
    </rewrite>
  </system.webServer>
</configuration>

结果:HTTP 500.50

尝试三:

<?xml version="1.0" encoding="utf-8"?>
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
  <location path="~1[app service name]" overrideMode="Allow">
    <system.webServer>
      <proxy enabled="true" preserveHostHeader="false" reverseRewriteHostInResponseHeaders="false" xdt:Transform="Insert" />
      <rewrite>
        <allowedServerVariables>
          <add name="HTTP_X_USE_HTTPS" xdt:Transform="Insert" />
        </allowedServerVariables>
      </rewrite>
    </system.webServer>
  </location>
</configuration>

结果:HTTP 503

尝试四:

<?xml version="1.0" encoding="utf-8"?>
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
  <location path="" overrideMode="Allow">
    <system.webServer>
      <proxy enabled="true" preserveHostHeader="false" reverseRewriteHostInResponseHeaders="false" xdt:Transform="Insert" />
      <rewrite>
        <allowedServerVariables>
          <add name="HTTP_X_USE_HTTPS" xdt:Transform="Insert" />
        </allowedServerVariables>
      </rewrite>
    </system.webServer>
  </location>
</configuration>

结果:HTTP 503

我知道在<?xml version="1.0" encoding="utf-8"?> <configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform"> <location path="[app service name]" overrideMode="Allow"> <system.webServer> <proxy enabled="true" preserveHostHeader="false" reverseRewriteHostInResponseHeaders="false" xdt:Transform="Insert" /> <rewrite> <allowedServerVariables> <add name="HTTP_X_USE_HTTPS" xdt:Transform="Insert" /> </allowedServerVariables> </rewrite> </system.webServer> </location> </configuration> 的{​​{1}}文件中,有一些地方applicationHost.config可以定义,例如在以下元素下:

  • Azure Website
  • <system.webServer>

...但是我尝试过这些组合无济于事。

问题

  • 还有其他可能的位置吗?
  • 我是否以任何方式错误配置了<configuration>文件?
  • 我错过了<configuration><location>的内容吗?

1 个答案:

答案 0 :(得分:5)

您必须使用以下内容在网站文件夹applicationHost.xdt下创建d:\home\site\applicationHost.xdt文件:

<?xml version="1.0"?> 
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform"> 
  <system.webServer> 
    <rewrite>
      <allowedServerVariables>
        <add name="HTTP_X_USE_HTTPS" xdt:Transform="InsertIfMissing" />
      </allowedServerVariables>
    </rewrite>
  </system.webServer>
</configuration>

现在您可以在web.config文件中使用新变量

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.webServer>
        <rewrite>           
            <rules>
                <rule name="Proxy">
                    <serverVariables>
                        <set name="HTTP_X_USE_HTTPS" value="{HTTPS}"/>
                    </serverVariables>
                </rule>
            </rules>
        </rewrite>
    </system.webServer>
</configuration>

另请参阅 https://azure.microsoft.com/en-us/documentation/articles/web-sites-transform-extend/https://github.com/projectkudu/kudu/wiki/Xdt-transform-samples