Dela via


Skriv om HTTP-huvuden och URL:en med Application Gateway

Med Application Gateway kan du skriva om valt innehåll i begäranden och svar. Med den här funktionen kan du översätta URL:er, frågesträngsparametrar och ändra begärande- och svarshuvuden. Du kan också lägga till villkor för att säkerställa att URL:en eller de angivna rubrikerna skrivs om endast när vissa villkor uppfylls. Dessa villkor baseras på informationen för begäran och svar.

Http-huvud- och URL-omskrivningsfunktionerna är endast tillgängliga för Application Gateway v2 SKU.

Begärande- och svarshuvuden

Med Application Gateway kan du lägga till, ta bort eller uppdatera HTTP-begärande- och svarshuvuden medan begärande- och svarspaketen flyttas mellan klient- och serverdelspoolerna. MED HTTP-huvuden kan en klient och server skicka extra information med en begäran eller ett svar. Genom att skriva om dessa rubriker kan du utföra viktiga uppgifter, inklusive:

  • Lägga till säkerhetsrelaterade rubrikfält som HSTS och X-XSS-Protection
  • Ta bort fält för svarsrubriker som kan visa känslig information
  • Ta bort portinformation från X-Forwarded-For-huvuden

Du kan skriva om alla rubriker i begäranden och svar, förutom rubrikerna Connection och Upgrade . Du kan också använda programgatewayen för att skapa anpassade huvuden och lägga till dem i de begäranden och svar som dirigeras genom den. Mer information om hur du skriver om begärande- och svarshuvuden med Application Gateway med hjälp av Azure-portalen finns här.

Ett diagram som visar rubriker i begärande- och svarspaket.

URL-sökväg och frågesträng

Med funktionen för URL-omskrivning i Application Gateway kan du:

  • Skriv om värdnamnet, sökvägen och frågesträngen för begärande-URL:en

  • Välj att skriva om URL:en för alla begäranden på en lyssnare eller endast de begäranden som matchar ett eller flera av de villkor som du anger. Dessa villkor baseras på egenskaperna för begäran (begärandehuvud och servervariabler).

  • Välj att dirigera begäran (välj serverdelspoolen) baserat på antingen den ursprungliga URL:en eller den omskrivna URL:en

Mer information om hur du skriver om URL:en med Application Gateway med hjälp av Azure-portalen finns här.

Diagram som beskriver processen för att skriva om en URL med Application Gateway.

Förstå omskrivningar i Application Gateway

En omskrivningsuppsättning är en samling av en routningsregel, ett villkor och en åtgärd.

  • Förfrågan om routningsregelassociation: Omskrivningskonfigurationen associeras till en ursprungslyssnare via dess routningsregel. När du använder en routningsregel av typen Basic associeras omskrivningskonfigurationen med dess lyssnare och fungerar som en global omskrivning. När du använder en sökvägsbaserad routningsregel definierar du omskrivningskonfigurationen enligt url-sökvägskartan. I det senare fallet gäller det endast för ett specifikt sökvägsområde på en plats. Du kan använda en omskrivningsuppsättning för flera routningsregler, men en routningsregel kan bara ha en omskrivning associerad med den.

  • Skriv om villkor: Den här konfigurationen är valfri. Baserat på de villkor som du definierar utvärderar Application Gateway innehållet i HTTP(S) begäranden och svar. Den efterföljande "omskrivningsåtgärden" inträffar om HTTP(S)-begäran eller -svaret matchar det här villkoret. Om du associerar fler än ett villkor med en åtgärd inträffar åtgärden endast när alla villkor uppfylls. Med andra ord är det en logisk AND-åtgärd. Du kan använda omskrivningsvillkor för att utvärdera innehållet i HTTP-begäranden och svar. Med den här valfria konfigurationen kan du endast utföra en omskrivning när ett eller flera villkor uppfylls. Programgatewayen använder dessa typer av variabler för att utvärdera innehållet i begäranden och svar:

    Du kan välja följande typer för att söka efter ett villkor:

    • HTTP-huvud (begäran och svar)
    • Servervariabler som stöds

    Med ett villkor kan du utvärdera om en angiven rubrik eller variabel finns genom att matcha deras värden via text eller ett Regex-mönster. För avancerade omskrivningskonfigurationer kan du även avbilda värdet för sidhuvud- eller servervariabeln för senare användning under Skriv om åtgärd. Läs mer om mönster och inspelning.

  • Skriv om-åtgärd: Åtgärdsuppsättningen för att skriva om låter dig ändra rubriker (för begäran eller svar) eller URL-komponenterna.

    En åtgärd kan ha följande värdetyper eller deras kombinationer:

    • SMS.
    • Värdet för begärandehuvudet – Om du vill använda värdet för ett insamlat begärandehuvud anger du syntaxen som {http_req_headerName}.
    • Svarshuvudets värde – Om du vill använda ett insamlat svarshuvuds värde från föregående villkor anger du syntaxen som {http_resp_headerName}. Omskrivningsåtgärdsblocket stöder också fältet "Header Value Matcher" för Set-Cookie-huvudet. Med det här valfria fältet kan du matcha och hämta värdet för en viss header när flera Set-Cookie rubriker med samma namn finns. Om du vill ändra den specifika cookiens insamlade värde kan du sedan använda {capt_header_value_matcher}. Läs mer om insamlingsfunktionen (capture) under Åtgärdsuppsättning.
    • Servervariabel – Om du vill använda en servervariabel anger du syntaxen som {var_serverVariable}. Lista över servervariabler som stöds.

Kommentar

Användning av fältet Matchning av rubrikvärde {capt_header_value_matcher} stöds för närvarande inte via portalen. Därför måste du använda en icke-portalmetod för put-åtgärder om du använder det här fältet.

När du använder en åtgärd för att skriva om en URL stöds följande åtgärder:

  • URL-sökväg: Det nya värdet som ska anges som sökväg.
  • URL-frågesträng: Det nya värde som frågesträngen måste skrivas om till.
  • Utvärdera sökvägskartan igen: Ange om url-sökvägskartan måste utvärderas på nytt efter omskrivningen. Om du inte markerar det här alternativet används den ursprungliga URL-sökvägen för att matcha sökvägsmönstret i URL-sökvägskartan. Om du anger det här alternativet till sant utvärderas url-sökvägskartan igen för att kontrollera matchningen med den omskrivna sökvägen. Om du aktiverar den här växeln kan du dirigera begäran till en annan serverdelspool efter omskrivning.

Mönstermatchning och insamling

Application Gateway stöder mönstermatchning och insamling under Villkor och åtgärd. Under Åtgärd stöder den mönstermatchning och insamling endast för en specifik rubrik.

Mönstermatchning

Application Gateway använder reguljära uttryck för mönstermatchning. Använd re2-kompatibla uttryck (Regular Expression 2) när du skriver din mönstermatchningssyntax.

Du kan använda mönstermatchning under både Villkor och Åtgärd.

  • Villkor: Använd den här inställningen för att matcha värdena för en rubrik- eller servervariabel. Om du vill matcha ett mönster under "Villkor" använder du egenskapen "mönster".
  • Åtgärd: Mönstermatchning under Åtgärdsuppsättning är endast tillgängligt för svarshuvudet Set-Cookie. Om du vill matcha ett mönster för Set-Cookie under en åtgärd använder du egenskapen HeaderValueMatcher . Om det registreras kan dess värde användas som {capt_header_value_matcher}. Eftersom det kan finnas flera Set-Cookie rubriker kan du med mönstermatchning här söka efter en specifik cookie. För en viss version av användaragenten vill du till exempel skriva om set-cookie svarshuvudet för cookie2 med max-age=3600 (en timme). I det här fallet kan du använda
    • Villkor – Typ: Begärandehuvud, Rubriknamn: user-agent, Mönster att matcha: *2.0
    • Åtgärd – Skriv om typ: Svarsrubrik, Åtgärdstyp: Ange, Rubriknamn: Set-Cookie, Rubrikvärde Matcher: cookie2=(.*), Rubrikvärde: cookie2={capt_header_value_matcher_1};Max-Age=3600

Kommentar

Om du kör en Application Gateway Web Application Firewall (WAF) med Core Rule Set 3.1 eller tidigare kan det uppstå problem när du använder Perl Compatible Regular Expressions (PCRE) för negativa eller positiva lookahead- och lookbehind-operationer.

Syntax för insamling

Du kan använda mönster för att avbilda en delsträng för senare användning. Placera parenteser runt ett undermönster i regex-definitionen. Det första par parenteserna lagrar sin delsträng i 1, det andra paret i 2 och så vidare. Du kan använda så många parenteser som du vill. Perl definierar fler numrerade variabler för att representera dessa insamlade strängar. Du hittar några exempel i den här programmeringsguiden för Perl.

  • (\d)(\d) # Matcha två siffror och samla in dem i grupperna 1 och 2
  • (\d+) # Matcha en eller flera siffror och samla in alla i grupp 1
  • (\d)+ # Matcha en siffra en eller flera gånger och samla in det sista i grupp 1

När du har hämtat dem kan du använda dem i värdet Åtgärdsuppsättning med följande format:

  • För en avbildning av begäranderubriken måste du använda {http_req_headerName_groupNumber}. Till exempel {http_req_User-Agent_1} eller {http_req_User-Agent_2}
  • För en avbildning av svarsrubriken måste du använda {http_resp_headerName_groupNumber}. Till exempel {http_resp_Location_1} eller {http_resp_Location_2}. För ett svarshuvud set-cookie som samlas in via egenskapen "HeaderValueMatcher" måste du använda {capt_header_value_matcher_groupNumber}. Till exempel {capt_header_value_matcher_1} eller {capt_header_value_matcher_2}.
  • För en servervariabel måste du använda {var_serverVariableName_groupNumber}. Till exempel {var_uri_path_1} eller {var_uri_path_2}

Kommentar

  • Användning av "/" som prefix och suffix i mönstret ska inte anges för att matcha värdet. Till exempel matchar (\d)(\d) två siffror. /(\d)(\d)/ matchar inte två siffror.
  • Fallet med villkorsvariabeln måste matcha fallet med avbildningsvariabeln. Om min villkorsvariabel till exempel är User-Agent måste min avbildningsvariabel vara för User-Agent (det vill säga {http_req_User-Agent_2}). Om min villkorsvariabel definieras som user-agent måste min avbildningsvariabel vara för user-agent (det vill:{http_req_user-agent_2}).
  • Om du vill använda hela värdet bör du inte nämna talet. Använd bara formatet {http_req_headerName}, osv. utan groupNumber.

Servervariabler

Application Gateway använder servervariabler för att lagra användbar information om servern, anslutningen till klienten och den aktuella begäran om anslutningen. Exempel på information som lagras är klientens IP-adress och webbläsartypen. Servervariabler ändras dynamiskt, till exempel när en ny sida läses in eller när ett formulär publiceras. Du kan använda dessa variabler för att utvärdera omskrivningsvillkor och skriva om rubriker. För att kunna använda värdet för servervariabler för att skriva om rubriker måste du ange dessa variabler i syntaxen {var_serverVariableName}

Application Gateway stöder följande servervariabler:

Variabelnamn beskrivning
add_x_forwarded_for_proxy Fältet X-Forwarded-For-klientbegäran med variabeln client_ip (se förklaring senare i den här tabellen) läggs till i formatet IP1, IP2, IP3 och så vidare. Om fältet X-Forwarded-For inte finns i huvudet för klientbegäran är variabeln add_x_forwarded_for_proxy lika med variabeln $client_ip . Den här variabeln är användbar när du vill skriva om X-Forwarded-For-huvudet som angetts av Application Gateway så att rubriken endast innehåller IP-adressen utan portinformationen.
stödda chiffer En lista över chiffer som stöds av klienten.
använda chiffer Strängen med chiffer som används för en etablerad TLS-anslutning.
klient_ip-adress IP-adressen för klienten som programgatewayen tog emot begäran från. Om det finns en omvänd proxy före programgatewayen och den ursprungliga klienten client_ip returnerar IP-adressen för den omvända proxyn.
client_port Klientporten.
klient_tcp_rtt Information om klientens TCP-anslutning. Finns på system som stöder alternativet TCP_INFO socket.
klientanvändare När HTTP-autentisering används anges användarnamnet för autentisering.
värd I den här prioritetsordningen: värdnamnet från begäranderaden, värdnamnet från fältet Värdbegärans huvud eller servernamnet som matchar en begäran. Exempel: I begäran http://contoso.com:8080/article.aspx?id=123&title=fabrikamär värdvärdet contoso.com
cookie_namn Namnet cookie.
http_method Den metod som används för att göra URL-begäran. Till exempel GET eller POST.
HTTP-status Sessionsstatus. Till exempel 200, 400 eller 403.
http_version Protokollet för begäran. Vanligtvis HTTP/1.0, HTTP/1.1 eller HTTP/2.0.
fråge_sträng Listan över variabel/värde-par som följer ? i den begärda URL:en. Exempel: I begäran http://contoso.com:8080/article.aspx?id=123&title=fabrikamär query_string värdet id=123&title=fabrikam
mottagna_byte Längden på begäran (inklusive begäranderaden, rubriken och begärandetexten).
request_query Argumenten på begäranderaden.
request_scheme Begärandeschemat: http eller https.
request_uri Den fullständiga ursprungliga begärande-URI:n (med argument). Exempel: i begäran http://contoso.com:8080/article.aspx?id=123&title=fabrikam*är request_uri värdet /article.aspx?id=123&title=fabrikam
Skickade_byte Antalet byte som skickas till en klient.
server_port Porten för servern som accepterade en begäran.
ssl-anslutningsprotokoll Protokollet för en upprättad TLS-anslutning.
ssl_aktiverad "På" om anslutningen fungerar i TLS-läge. Annars en tom sträng.
uri_path Identifierar den specifika resursen i värden som webbklienten vill komma åt. Variabeln refererar till den ursprungliga URL-sökvägen före någon manipulation. Det här är en del av begärande-URI:n utan argumenten. I begäran http://contoso.com:8080/article.aspx?id=123&title=fabrikamär /article.aspxtill exempel värdet uri_path .

Servervariabler för ömsesidig autentisering

Application Gateway stöder följande servervariabler för scenarier med ömsesidig autentisering. Använd dessa servervariabler som andra servervariabler.

Variabelnamn beskrivning
klientcertifikat Klientcertifikatet i PEM-format för en etablerad SSL-anslutning.
klientcertifikat_slutdatum Slutdatum för klientcertifikatet.
klientcertifikat_fingeravtryck SHA1-fingeravtrycket för klientcertifikatet för en etablerad SSL-anslutning.
klientcertifikatutfärdare Strängen "issuer DN" för klientcertifikatet för en etablerad SSL-anslutning.
klientcertifikat_serialnummer Serienumret för klientcertifikatet för en etablerad SSL-anslutning.
klientcertifikats startdatum Startdatumet för klientcertifikatet.
ämne för klientcertifikat Strängen "ämnes-DN" för klientcertifikatet för en etablerad SSL-anslutning.
verifiering av klientcertifikat Resultatet av verifieringen av klientcertifikatet: SUCCESS, FAILED:<reason> eller NONE om ett certifikat inte fanns.

Vanliga scenarier för sidhuvudomskrivning

Ta bort portinformation från rubriken X-Forwarded-For

Application Gateway infogar ett X-Forwarded-For-huvud i alla begäranden innan begäranden vidarebefordras till serverdelen. Det här huvudet är en kommaavgränsad lista över IP-portar. Det kan finnas scenarier där serverdelsservrarna bara behöver rubrikerna för att innehålla IP-adresser. Du kan använda sidhuvudomskrivning för att ta bort portinformationen från rubriken X-Forwarded-For. Ett sätt att göra detta är att ange huvudet till add_x_forwarded_for_proxy servervariabeln. Du kan också använda variabeln client_ip:

En skärmbild som visar en åtgärd för att ta bort port.

Ändra en omdirigerings-URL

Det kan vara användbart att ändra en omdirigerings-URL under vissa omständigheter. Du kanske till exempel ursprungligen omdirigerar klienter till en sökväg som "/blog" men vill nu skicka dem till "/updates" på grund av en ändring i innehållsstrukturen.

Varning

Du kan behöva ändra en omdirigerings-URL när du konfigurerar Application Gateway för att åsidosätta värdnamnet mot backend. I den här konfigurationen ser serverdelen ett annat värdnamn än webbläsaren. Omdirigeringen använder inte rätt värdnamn. Denna konfiguration rekommenderas inte.

Mer information om begränsningarna och konsekvenserna av en sådan konfiguration finns i Bevara det ursprungliga HTTP-värdnamnet mellan en omvänd proxy och dess bakomliggande webbprogram. Den rekommenderade konfigurationen för App Service finns i "Anpassad domän (rekommenderas)" i Konfigurera App Service med Application Gateway. Att skriva om platsrubriken för svaret enligt beskrivningen i följande exempel bör betraktas som en lösning och tar inte upp rotorsaken.

När apptjänsten skickar ett omdirigeringssvar använder den samma värdnamn i platsrubriken för sitt svar som det i begäran som den tar emot från programgatewayen. Klienten skickar därför begäran direkt till i stället för att contoso.azurewebsites.net/path2 gå via programgatewayen (contoso.com/path2). Det är inte önskvärt att kringgå programgatewayen.

Du kan lösa det här problemet genom att ange värdnamnet i platshuvudet till programgatewayens domännamn.

Här följer stegen för att ersätta värdnamnet:

  1. Skapa en omskrivningsregel med ett villkor som kontrollerar om platsrubriken i svaret innehåller azurewebsites.net. Ange det mönstret (https?)://.azurewebsites.net(.).

  2. Utför en åtgärd för att skriva om platsrubriken så att den har programgatewayens värdnamn. Ange {http_resp_Location_1}://contoso.com{http_resp_Location_2} som rubrikvärde. Du kan också använda servervariabeln host för att ange värdnamnet så att det matchar den ursprungliga begäran.

    En skärmbild av åtgärden ändra platsrubrik.

Implementera HTTP-huvuden för säkerhet för att förhindra sårbarheter

Du kan åtgärda flera säkerhetsrisker genom att implementera nödvändiga huvuden i programsvaret. Dessa säkerhetsrubriker omfattar X-XSS-Protection, Strict-Transport-Security och Content-Security-Policy. Du kan använda Application Gateway för att ange dessa huvuden för alla svar.

En skärmbild av en säkerhetsrubrik.

Ta bort oönskade rubriker

Du kanske vill ta bort rubriker som visar känslig information från ett HTTP-svar. Du kanske till exempel vill ta bort information som serverdelsserverns namn, operativsystem eller biblioteksinformation. Du kan använda programgatewayen för att ta bort dessa huvuden:

En skärmbild som visar åtgärden för att ta bort sidhuvud.

Du kan inte skapa en omskrivningsregel för att ta bort värdhuvudet. Om du försöker skapa en omskrivningsregel med åtgärdstypen inställd på att ta bort och huvudet har angetts som värd resulterar det i ett fel.

Kontrollera om det finns en rubrik

Du kan utvärdera en HTTP-begäran eller ett svarshuvud för förekomsten av en rubrik- eller servervariabel. Den här utvärderingen är användbar när du bara vill skriva om en rubrik när en viss rubrik finns.

En skärmbild som visar kontrollen av en rubrikåtgärd.

Vanliga scenarier för URL-omskrivning

Val av parameterbaserad sökväg

Om du vill utföra scenarier där du vill välja serverdelspoolen baserat på värdet för en rubrik, en del av URL:en eller frågesträngen i begäran använder du en kombination av url-omskrivningsfunktionen och sökvägsbaserad routning.

Skapa en omskrivningsuppsättning med ett villkor som söker efter en specifik parameter (frågesträng, sidhuvud osv.) och utför sedan en åtgärd där den ändrar URL-sökvägen (se till att Omvärdera sökvägskartan är aktiverad). Associera omskrivningsuppsättningen till en sökvägsbaserad regel. Den sökvägsbaserade regeln måste innehålla samma URL-sökvägar som anges i omskrivningsuppsättningen och motsvarande serverdelspool.

Med omskrivningsuppsättningen kan du därför kontrollera en specifik parameter och tilldela den en ny sökväg, och med den sökvägsbaserade regeln kan du tilldela backend-pooler till dessa sökvägar. Så länge som "Omvärdera sökvägskarta" är aktiverat dirigeras trafiken baserat på sökvägen som anges i omskrivningsuppsättningen.

Ett exempel på användningsfall med frågesträngar finns i Dirigera trafik med parameterbaserad sökvägsval i portalen.

Skriv om frågesträngsparametrar baserat på URL:en

Tänk dig ett scenario med en shoppingwebbplats där länken som visas av användaren är enkel och läsbar, men serverdelsservern behöver frågesträngsparametrarna för att visa rätt innehåll.

I så fall kan Application Gateway samla in parametrar från URL:en och lägga till nyckel/värde-par för frågesträngar från dessa parametrar i URL:en. Om användaren till exempel vill skriva om https://www.contoso.com/fashion/shirts till https://www.contoso.com/buy.aspx?category=fashion&product=shirtskan du uppnå det här målet genom följande URL-omskrivningskonfiguration.

Villkor – om servervariabeln uri_path är lika med mönstret /(.+)/(.+)

Url-omskrivningsscenario 2–1.

Åtgärd – Ange URL-sökväg till buy.aspx och frågesträng till category={var_uri_path_1}&product={var_uri_path_2}

Url-omskrivningsscenario 2–2.

En steg-för-steg-guide för att uppnå det scenario som beskrevs tidigare finns i Skriva om URL:en med Application Gateway med hjälp av Azure-portalen.

Skriv om vanliga fallgropar i konfigurationen

  • Du kan inte aktivera "Omvärdera sökvägskarta" för grundläggande routningsregler för begäranden. Den här begränsningen förhindrar en oändlig utvärderingsloop för en grundläggande routningsregel.

  • För sökvägsbaserade routningsregler behöver du minst en villkorsstyrd omskrivningsregel eller en omskrivningsregel där 'Omvärdera sökvägskarta' inte är aktiverat. Det här kravet förhindrar en oändlig utvärderingsloop för en sökvägsbaserad routningsregel.

  • Om en loop skapas dynamiskt baserat på klientindata avslutas inkommande begäranden med en 500-felkod. Application Gateway fortsätter att hantera andra begäranden utan försämring i det här scenariot.

Använda URL-omskrivning eller omskrivning av värdhuvud med Brandvägg för webbprogram (WAF_v2 SKU)

När du konfigurerar omskrivning av URL eller omskrivning av värdhuvud sker WAF-utvärderingen efter ändringen av begärandehuvudet eller URL-parametrarna (efter omskrivning). När du tar bort omskrivningen av URL:en eller omskrivningskonfigurationen för värdhuvuden i Application Gateway sker WAF-utvärderingen innan sidhuvudet skrivs om (förskrivning). Den här ordningen säkerställer att WAF-reglerna gäller för den slutliga begäran som din serverdelspool tar emot.

Anta till exempel att du har följande rubrikomskrivningsregel för rubriken "Accept" : "text/html" – om värdet för rubriken "Accept" är lika med "text/html"skriver du om värdet till "image/png".

Med endast huvudomskrivning konfigurerad sker WAF-utvärderingen på "Accept" : "text/html". Men när du konfigurerar omskrivning av URL eller omskrivning av värdhuvud sker WAF-utvärderingen på "Accept" : "image/png".

Url-omskrivning jämfört med URL-omdirigering

För en URL-omskrivning skriver Application Gateway om URL:en innan den skickar begäran till serverdelen. Den här åtgärden ändrar inte vad användarna ser i webbläsaren eftersom ändringarna är dolda för användaren.

För en URL-omdirigering skickar Application Gateway ett omdirigeringssvar till klienten med den nya URL:en. Det svaret kräver att klienten skickar sin begäran till den nya URL:en som anges i omdirigeringen. Url:en som användaren ser i webbläsaren uppdateras till den nya URL:en.

Skriv om jämfört med omdirigering.

Begränsningar

  • Omskrivningar stöds inte när programgatewayen har konfigurerats för att omdirigera begäranden eller för att visa en anpassad felsida.
  • Namn på begäranderubriker kan innehålla alfanumeriska tecken och bindestreck. Rubriknamn som innehåller icke-standardtecken ignoreras när en begäran skickas till backend-systemet.
  • Namn på svarshuvud kan innehålla alfanumeriska tecken och specifika symboler enligt definitionen i RFC 7230.
  • Du kan inte skriva om X-Original-Host, Connectionoch upgrade rubriker.
  • Omskrivningar stöds inte för 4xx- och 5xx-svar som genereras direkt från Application Gateway.

Nästa steg