2016-02-25 57 views
3

技術信息哪裏應該<Azure網站applicationHost.config中存在<allowedServerVariables>標籤?

方案

我已經實現了我的0反向代理,但是接收服務器沒有得到任何關於初始請求是否超過HTTPS的指示。

我想要做的是通過自定義HTTP HeaderHTTPS標誌ON/OFF從初始請求發送到代理服務器。

理論上

  • 使用shibayanIIS Manager Site Extension,我可以編輯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> 

,並試圖在哪裏把<serverVariables>標籤的幾個組合...

嘗試一:

this answer中所述。

<?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 - URL重寫模塊錯誤。

服務器變量「HTTP_X_USE_HTTPS」不允許設置。將 服務器變量名稱添加到允許的服務器變量列表中。

嘗試二:

<?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 500。50

嘗試三:

<?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> 

結果:HTTP 503

我知道, Ť他applicationHost.config文件的Azure Website有一些<system.webServer>可以定義幾個地方,如在以下元素:

  • <configuration>
  • <configuration><location>

...不過我已經試過這些組合無濟於事。

問題

  • 有另一種可能的位置?
  • 我以任何方式錯誤地配置了我的.xdt文件嗎?
  • 我是否缺少我的applicationHost.config

回答

2

你必須創建站點文件夾d:\home\site\applicationHost.xdtapplicationHost.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

相關問題