2017-11-17 1 views
0

Wir versuchen, den Header "host" mit der Überschrift "X-CF-ORIGIN" neu zu schreiben - dies funktioniert jedoch lokal im App-Service. Alle Protokolle zeigen an, dass es funktioniert hat, aber wir scheinen den Effekt nicht zu sehen.Azure-App-Dienst applicationHost.config Servervariable einstellen funktioniert, funktioniert aber nicht

Wir erwarten, einen 500 Fehler für einen falschen HOST-Header zu erhalten, jedoch wird die Website so aufgelöst, als ob der Host-Header nicht geändert wurde.

Auch unsere XDT-Transformation zeigt an, dass es funktioniert hat (siehe unten).

This was initially raised on Kudu Github aber wurden hier für Azure App Service IIS Fragen gerichtet.

Ein Codebeispiel: https://github.com/Workshop2/webforms-host-header-rewrite-spike

anschauliches Beispiel: http://webforms-fun.azurewebsites.net/ mit XDT verwandeln

Unsere Rewrite-Regel:

<rule name="CDN Host Header Rewrite" stopProcessing="false"> 
    <match url=".*" /> 
    <conditions logicalGrouping="MatchAll" trackAllCaptures="true"> 
    <add input="{HTTP_X_CF_ORIGIN}" pattern="(.+)" /> 
    </conditions> 
    <serverVariables> 
    <set name="HTTP_HOST" value="{C:1}" /> 
    </serverVariables>  
    <action type="None" /> 
</rule> 

Unsere XDT-Transformation:

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

applicationHost (via IIS Manager gefunden):

<rewrite> 
    <allowedServerVariables> 
    <add name="HTTP_HOST" /> 
    </allowedServerVariables> 
    <globalRules /> 
    <outboundRules /> 
    <providers /> 
    <rewriteMaps /> 
    <rules /> 
</rewrite> 

Anforderungsfehler Tracking:

Example of header saying it's been updated

Testing

Wenn ich eine Testregel erstellen die HTTP_HOST zu beweisen, verändert wird, es korrekt verwendet die HTTP_HOST Datensatz über den X-CF-ORIGIN-Header:

<rule name="test" stopProcessing="true"> 
    <match url=".*" /> 
    <conditions logicalGrouping="MatchAll" trackAllCaptures="true"> 
    <add input="{HTTP_X_CF_ORIGIN}" pattern=".+" /> 
    <add input="{HTTP_HOST}" pattern="(.+)" /> 
    </conditions> 
    <action type="Redirect" url="http://some-site.com/{C:1}" redirectType="Temporary" /> 
</rule> 

Bitte helfen - was wir verpasst haben?

Antwort

1

Ich habe festgestellt, dass Azure die Servervariable HTTP_HOST nicht gerne einstellen würde. Es funktioniert einwandfrei, wenn Sie die Verwendung HTTP_DISGUISED_HOST

Ändern Sie diese Zeile in der Rewrite-Regel:

<set name="HTTP_HOST" value="{C:1}" /> 

dazu:

<set name="HTTP_DISGUISED_HOST" value="{C:1}" /> 

Ändern Sie diese Zeile in der applicationHost.xdt:

<add name="HTTP_HOST" xdt:Transform="InsertIfMissing" /> 

zu diesem:

<add name="HTTP_DISGUISED_HOST" xdt:Transform="InsertIfMissing" /> 
Verwandte Themen