Ponowne zapisywanie nagłówków i adresów URL HTTP za pomocą usługi Application Gateway
Usługa Application Gateway umożliwia ponowne zapisywanie wybranej zawartości żądań i odpowiedzi. Dzięki tej funkcji można tłumaczyć adresy URL, parametry ciągu zapytania oraz modyfikować nagłówki żądań i odpowiedzi. Umożliwia również dodawanie warunków w celu upewnienia się, że adres URL lub określone nagłówki zostaną przepisane tylko wtedy, gdy zostaną spełnione określone warunki. Te warunki są oparte na informacjach dotyczących żądania i odpowiedzi.
Funkcje ponownego zapisywania nagłówka i adresu URL HTTP są dostępne tylko dla jednostki SKU usługi Application Gateway w wersji 2.
Nagłówki żądań i odpowiedzi
Usługa Application Gateway umożliwia dodawanie, usuwanie lub aktualizowanie nagłówków żądań HTTP i odpowiedzi, podczas gdy pakiety żądań i odpowiedzi są przenoszone między pulami klienta i zaplecza. Nagłówki HTTP umożliwiają klientowi i serwerowi przekazywanie dodatkowych informacji z żądaniem lub odpowiedzią. Zapisując te nagłówki ponownie, można wykonać ważne zadania, takie jak dodawanie pól nagłówków związanych z zabezpieczeniami, takich jak HSTS/ X-XSS-Protection, usuwanie pól nagłówka odpowiedzi, które mogą ujawniać poufne informacje i usuwanie informacji o porcie z nagłówków X-Forwarded-For.
Możesz ponownie napisać wszystkie nagłówki w żądaniach i odpowiedziach, z wyjątkiem Connection
nagłówków i .Upgrade
Możesz również użyć bramy aplikacji, aby utworzyć nagłówki niestandardowe i dodać je do żądań i odpowiedzi kierowanych przez nią. Aby dowiedzieć się, jak przepisać nagłówki żądań i odpowiedzi za pomocą usługi Application Gateway przy użyciu witryny Azure Portal, zobacz tutaj.
Ścieżka adresu URL i ciąg zapytania
Dzięki możliwości ponownego zapisywania adresów URL w usłudze Application Gateway można wykonywać następujące czynności:
Ponowne zapisywanie nazwy hosta, ścieżki i ciągu zapytania adresu URL żądania
Wybierz ponowne zapisywanie adresu URL wszystkich żądań na odbiorniku lub tylko tych żądań, które pasują do co najmniej jednego ustawionego warunków. Te warunki są oparte na właściwościach żądania (nagłówek żądania i zmienne serwera).
Wybierz kierowanie żądania (wybierz pulę zaplecza) na podstawie oryginalnego adresu URL lub przepisanego adresu URL
Aby dowiedzieć się, jak ponownie napisać adres URL w usłudze Application Gateway przy użyciu witryny Azure Portal, zobacz tutaj.
Omówienie ponownego zapisywania w usłudze Application Gateway
Zestaw ponownego zapisywania jest kolekcją reguły routingu, warunku i akcji.
Skojarzenie reguły routingu żądań: konfiguracja ponownego zapisywania jest skojarzona z odbiornikiem źródłowym za pośrednictwem reguły routingu. Jeśli używasz reguły routingu typu Podstawowa, konfiguracja ponownego zapisywania jest skojarzona z jego odbiornikiem i działa jako globalne ponowne zapisywanie. W przypadku korzystania z reguły routingu opartej na ścieżkach konfiguracja ponownego zapisywania jest definiowana zgodnie z mapą ścieżek URL. W tym ostatnim przypadku dotyczy tylko określonego obszaru ścieżki witryny. Można zastosować zestaw ponownego zapisywania do wielu reguł routingu, ale reguła routingu może mieć tylko jedną ponownie skojarzona z nią reguła.
Warunek ponownego zapisywania: jest to opcjonalna konfiguracja. Na podstawie zdefiniowanych warunków usługa Application Gateway oceni zawartość żądań i odpowiedzi HTTP(S). Kolejna akcja "ponownego zapisywania" zostanie wykonana, jeśli żądanie HTTP(S) lub odpowiedź jest zgodne z tym warunkiem. Jeśli skojarzysz więcej niż jeden warunek z akcją, akcja występuje tylko wtedy, gdy zostaną spełnione wszystkie warunki. Innymi słowy, jest to operacja logiczna AND. Możesz użyć warunków ponownego zapisywania, aby ocenić zawartość żądań i odpowiedzi HTTP(S). Ta opcjonalna konfiguracja umożliwia wykonanie ponownego zapisywania tylko wtedy, gdy zostanie spełniony co najmniej jeden warunek. Brama aplikacji używa tych typów zmiennych do oceny zawartości żądań i odpowiedzi:
Możesz wybrać następujące typy, aby wyszukać warunek:
- Nagłówek HTTP (żądanie i odpowiedź)
- Obsługiwane zmienne serwera
Warunek pozwala ocenić, czy określony nagłówek lub zmienna istnieje, pasując do ich wartości za pomocą tekstu lub wzorca wyrażenia regularnego. W przypadku zaawansowanych konfiguracji ponownego zapisywania można również przechwycić wartość nagłówka lub zmiennej serwera do późniejszego użycia w obszarze Akcja ponownego zapisywania. Dowiedz się więcej o wzorcu i przechwytywaniu.
Akcja ponownego zapisywania: zestaw akcji ponownego zapisywania umożliwia ponowne zapisywanie nagłówków (żądanie lub odpowiedź) lub składników adresu URL.
Akcja może mieć następujące typy wartości lub ich kombinacje:
- Tekst.
- Wartość nagłówka żądania — aby użyć przechwyconej wartości nagłówka żądania, określ składnię jako
{http_req_headerName}
. - Wartość nagłówka odpowiedzi — aby użyć przechwyconej wartości nagłówka odpowiedzi z poprzedniego warunku, określ składnię jako
{http_resp_headerName}
. Blok Akcja ponownego zapisywania obsługuje również pole "Dopasowanie wartości nagłówka" dla nagłówka Set-Cookie. To pole opcjonalne umożliwia dopasowanie, a także przechwycenie wartości określonego nagłówka, gdy istnieje wiele nagłówków Set-Cookie o tej samej nazwie. Aby manipulować przechwyconą wartością określonego pliku cookie, możesz użyć polecenia{capt_header_value_matcher}
. Dowiedz się więcej o przechwytywaniu w obszarze Zestaw akcji. - Zmienna serwera — aby użyć zmiennej serwera, określ składnię jako
{var_serverVariable}
. Lista obsługiwanych zmiennych serwera.
Uwaga
Użycie pola dopasowywania wartości nagłówka {capt_header_value_matcher} nie jest obecnie obsługiwane za pośrednictwem portalu. W związku z tym należy nadal używać metody innej niż portal dla operacji PUT, jeśli używasz tego pola.
W przypadku ponownego zapisywania adresu URL przy użyciu akcji obsługiwane są następujące operacje:
- Ścieżka adresu URL: nowa wartość, która ma zostać ustawiona jako ścieżka.
- Ciąg zapytania adresu URL: nowa wartość, do której musi zostać przepisany ciąg zapytania.
- Ponownie oceń mapę ścieżki: określ, czy mapa ścieżek URL musi zostać ponownie obliczona po ponownym zapisaniu. Jeśli zachowano niezaznaczone, oryginalna ścieżka adresu URL będzie używana do dopasowania wzorca ścieżki w mapie ścieżki adresu URL. Jeśli ustawiono wartość true, mapa ścieżki adresu URL zostanie ponownie obliczona, aby sprawdzić dopasowanie ze ścieżką przepisaną. Włączenie tego przełącznika pomaga w rozsyłaniu żądania do innej puli zaplecza po ponownym zapisie.
Dopasowywanie i przechwytywanie wzorców
Dopasowywanie i przechwytywanie patten jest obsługiwane w obszarze Warunek i akcja (w obszarze Akcja jest obsługiwana tylko dla określonego nagłówka).
Dopasowanie do wzorca
Usługa Application Gateway używa wyrażeń regularnych do dopasowywania wzorców. Podczas pisania składni dopasowania wzorca należy użyć wyrażeń zgodnych z wyrażeniem regularnym 2 (RE2).
Można użyć dopasowania wzorca zarówno w obszarze Warunek, jak i Akcja.
- Warunek: służy do dopasowywania wartości dla nagłówka lub zmiennej serwera. Aby dopasować wzorzec w obszarze "Warunki", użyj właściwości "pattern".
- Akcja: Dopasowywanie wzorca w obszarze Zestaw akcji jest dostępne tylko dla nagłówka odpowiedzi "Set-Cookie". Aby dopasować wzorzec ustawiania plików cookie w ramach akcji, użyj właściwości "HeaderValueMatcher". W przypadku przechwycenia jego wartość może być używana jako {capt_header_value_matcher}. Ponieważ istnieje wiele plików Set-Cookie, wzorzec pasujący tutaj umożliwia wyszukiwanie określonego pliku cookie. Przykład: w przypadku określonej wersji agenta użytkownika chcesz ponownie napisać nagłówek odpowiedzi set-cookie dla "cookie2" z wartością max-age=3600 (jedna godzina). W tym przypadku możesz użyć polecenia
- Warunek — typ: nagłówek żądania, nazwa nagłówka: user-agent, wzorzec odpowiadający: *2.0
- Akcja — Typ ponownego zapisywania: Nagłówek odpowiedzi, Typ akcji: Set, Nazwa nagłówka: Set-Cookie, Header Value Matcher: cookie2=(.*), Wartość nagłówka: cookie2={capt_header_value_matcher_1}; Max-Age=3600
Uwaga
Jeśli używasz zapory aplikacji internetowej usługi Application Gateway (WAF) z podstawowym zestawem reguł 3.1 lub starszym, mogą wystąpić problemy podczas korzystania z zgodnych wyrażeń regularnych perl (PCRE) podczas wykonywania zapytań i asercji lookbehind (ujemnych lub dodatnich).
Składnia przechwytywania
Wzorce mogą również służyć do przechwytywania podciągów do późniejszego użycia. Umieść nawiasy wokół podwzór w definicji wyrażenia regularnego. Pierwsza para nawiasów przechowuje jego podciąg w 1, drugą parę w 2 itd. Możesz użyć tak wielu nawiasów, jak chcesz; Narzędzie Perl po prostu definiuje więcej zmiennych ponumerowanych, aby reprezentować te przechwycone ciągi. Przykład można znaleźć w tym przewodniku programowania Perl.
- (\d)(\d) # Dopasuj dwie cyfry, przechwytując je w grupach 1 i 2
- (\d+) # Dopasuj co najmniej jedną cyfrę, przechwytując je wszystkie w grupie 1
- (\d)+ # Dopasuj cyfrę co najmniej raz, przechwytując ostatni w grupie 1
Po przechwyceniu można ich użyć w wartości Zestaw akcji przy użyciu następującego formatu:
- W przypadku przechwytywania nagłówka żądania należy użyć elementu {http_req_headerName_groupNumber}. Na przykład {http_req_User-Agent_1} lub {http_req_User-Agent_2}
- W przypadku przechwytywania nagłówka odpowiedzi należy użyć elementu {http_resp_headerName_groupNumber}. Na przykład {http_resp_Location_1} lub {http_resp_Location_2}. Podczas gdy w przypadku nagłówka odpowiedzi Set-Cookie przechwyconego za pomocą właściwości "HeaderValueMatcher" należy użyć elementu {capt_header_value_matcher_groupNumber}. Na przykład {capt_header_value_matcher_1} lub {capt_header_value_matcher_2}.
- W przypadku zmiennej serwera należy użyć elementu {var_serverVariableName_groupNumber}. Na przykład {var_uri_path_1} lub {var_uri_path_2}
Uwaga
- Użyj wartości / do prefiksu i sufiksu wzorzec nie powinien być określony we wzorcu, aby dopasować wartość. Na przykład (\d)(\d) będzie odpowiadać dwóm cyfrom. /(\d)(\d)/ nie pasuje do dwóch cyfr.
- Wielkość zmiennej warunku musi odpowiadać wielkości liter zmiennej przechwytywania. Jeśli na przykład moja zmienna warunku to User-Agent, zmienna przechwytywania musi być dla agenta użytkownika (tj. {http_req_User-Agent_2}). Jeśli moja zmienna warunku jest zdefiniowana jako agent użytkownika, zmienna przechwytywania musi być dla agenta użytkownika (tj. {http_req_user-agent_2}).
- Jeśli chcesz użyć wartości całkowitej, nie należy wspomnieć o liczbie. Wystarczy użyć formatu {http_req_headerName}, itp. bez wartości groupNumber.
Zmienne serwera
Usługa Application Gateway używa zmiennych serwera do przechowywania przydatnych informacji o serwerze, połączeniu z klientem i bieżącym żądaniu połączenia. Przykłady przechowywanych informacji obejmują adres IP klienta i typ przeglądarki internetowej. Zmienne serwera zmieniają się dynamicznie, na przykład po załadowaniu nowej strony lub opublikowaniu formularza. Te zmienne umożliwiają ocenę warunków ponownego zapisywania i ponownego zapisywania nagłówków. Aby użyć wartości zmiennych serwera do ponownego zapisania nagłówków, należy określić te zmienne w składni {var_serverVariableName}
Usługa Application Gateway obsługuje następujące zmienne serwera:
Nazwa zmiennej | opis |
---|---|
add_x_forwarded_for_proxy | Pole nagłówka żądania klienta X-Forwarded-For ze zmienną client_ip (zobacz wyjaśnienie w dalszej części tej tabeli) dołączone do niego w formacie IP1, IP2, IP3 itd. Jeśli pole X-Forwarded-For nie znajduje się w nagłówku żądania klienta, zmienna add_x_forwarded_for_proxy jest równa zmiennej $client_ip . Ta zmienna jest przydatna, gdy chcesz ponownie napisać nagłówek X-Forwarded-For ustawiony przez usługę Application Gateway, aby nagłówek zawierał tylko adres IP bez informacji o porcie. |
ciphers_supported | Lista szyfrów obsługiwanych przez klienta. |
ciphers_used | Parametry szyfrowania używane na potrzeby ustanowionego połączenia TLS. |
client_ip | Adres IP klienta, z którego brama aplikacji odebrała żądanie. Jeśli istnieje zwrotny serwer proxy przed bramą aplikacji i klientem źródłowym, client_ip zwraca adres IP zwrotnego serwera proxy. |
client_port | Port klienta. |
client_tcp_rtt | Informacje o połączeniu TCP klienta. Dostępne w systemach obsługujących opcję gniazda TCP_INFO. |
client_user | Gdy jest używane uwierzytelnianie HTTP, nazwa użytkownika podana do uwierzytelniania. |
host | W tej kolejności pierwszeństwa: nazwa hosta z wiersza żądania, nazwa hosta z pola nagłówka żądania hosta lub nazwa serwera pasującego do żądania. Przykład: W żądaniu http://contoso.com:8080/article.aspx?id=123&title=fabrikam wartość hosta to contoso.com |
nazwa cookie_ | Nazwa pliku cookie. |
http_method | Metoda użyta do wykonania żądania adresu URL. Na przykład GET lub POST. |
http_status | Stan sesji. Na przykład 200, 400 lub 403. |
http_version | Protokół żądania. Zazwyczaj HTTP/1.0, HTTP/1.1 lub HTTP/2.0. |
query_string | Lista par zmiennych/wartości, które są zgodne z "?" w żądanym adresie URL. Przykład: W żądaniu http://contoso.com:8080/article.aspx?id=123&title=fabrikam query_string wartość to id=123&title=fabrikam |
received_bytes | Długość żądania (w tym wiersz żądania, nagłówek i treść żądania). |
request_query | Argumenty w wierszu żądania. |
request_scheme | Schemat żądania: http lub https. |
request_uri | Pełny oryginalny identyfikator URI żądania (z argumentami). Przykład: w żądaniu http://contoso.com:8080/article.aspx?id=123&title=fabrikam* request_uri wartość to /article.aspx?id=123&title=fabrikam |
sent_bytes | Liczba bajtów wysłanych do klienta. |
server_port | Port serwera, który zaakceptował żądanie. |
ssl_connection_protocol | Protokół ustanowionego połączenia TLS. |
ssl_enabled | "Włączone", jeśli połączenie działa w trybie TLS. W przeciwnym razie pusty ciąg. |
uri_path | Identyfikuje określony zasób na hoście, do którego klient internetowy chce uzyskać dostęp. Zmienna odwołuje się do oryginalnej ścieżki adresu URL przed manipulacją. Jest to część identyfikatora URI żądania bez argumentów. Na przykład w żądaniu http://contoso.com:8080/article.aspx?id=123&title=fabrikam wartość uri_path to /article.aspx . |
Zmienne serwera uwierzytelniania wzajemnego
Usługa Application Gateway obsługuje następujące zmienne serwera dla scenariuszy wzajemnego uwierzytelniania. Użyj tych zmiennych serwera w taki sam sposób jak powyżej z innymi zmiennymi serwera.
Nazwa zmiennej | opis |
---|---|
client_certificate | Certyfikat klienta w formacie PEM dla ustanowionego połączenia SSL. |
client_certificate_end_date | Data zakończenia certyfikatu klienta. |
client_certificate_fingerprint | Odcisk palca SHA1 certyfikatu klienta dla ustanowionego połączenia SSL. |
client_certificate_issuer | Parametry "issuer DN" certyfikatu klienta dla ustanowionego połączenia SSL. |
client_certificate_serial | Numer seryjny certyfikatu klienta dla ustanowionego połączenia SSL. |
client_certificate_start_date | Data rozpoczęcia certyfikatu klienta. |
client_certificate_subject | Parametry "subject DN" certyfikatu klienta dla ustanowionego połączenia SSL. |
client_certificate_verification | Wynik weryfikacji certyfikatu klienta: SUCCESS, FAILED:<reason> lub NONE, jeśli certyfikat nie był obecny. |
Typowe scenariusze ponownego zapisywania nagłówka
Usuwanie informacji o porcie z nagłówka X-Forwarded-For
Usługa Application Gateway wstawia nagłówek X-Forwarded-For do wszystkich żądań przed przekazaniem żądań do zaplecza. Ten nagłówek jest rozdzielaną przecinkami listą portów IP. Mogą istnieć scenariusze, w których serwery zaplecza muszą zawierać tylko nagłówki zawierające adresy IP. Aby usunąć informacje o porcie z nagłówka X-Forwarded-For, możesz użyć ponownego zapisywania nagłówka. Jednym ze sposobów wykonania tej czynności jest ustawienie nagłówka na zmienną serwera add_x_forwarded_for_proxy. Alternatywnie możesz również użyć zmiennej client_ip:
Modyfikowanie adresu URL przekierowania
Modyfikacja adresu URL przekierowania może być przydatna w pewnych okolicznościach. Na przykład: klienci zostali pierwotnie przekierowani do ścieżki takiej jak "/blog", ale teraz powinni zostać wysłani do "/updates" ze względu na zmianę struktury zawartości.
Ostrzeżenie
Potrzeba zmodyfikowania adresu URL przekierowania czasami pojawia się w kontekście konfiguracji, w której usługa Application Gateway jest skonfigurowana do zastąpienia nazwy hosta w kierunku zaplecza. Nazwa hosta widoczna w zapleczu różni się w takim przypadku od nazwy hosta widocznej w przeglądarce. W takiej sytuacji przekierowanie nie będzie używać poprawnej nazwy hosta. Ta konfiguracja nie jest zalecana.
Ograniczenia i implikacje takiej konfiguracji opisano w artykule Zachowaj oryginalną nazwę hosta HTTP między zwrotnym serwerem proxy a aplikacją internetową zaplecza. Zalecaną konfiguracją usługi App Service jest wykonanie instrukcji dotyczących "Domena niestandardowa (zalecana)" w temacie Konfigurowanie usługi App Service z usługą Application Gateway. Ponowne zapisywanie nagłówka lokalizacji w odpowiedzi zgodnie z opisem w poniższym przykładzie powinno być traktowane jako obejście problemu i nie dotyczy głównej przyczyny.
Gdy usługa App Service wysyła odpowiedź przekierowania, używa tej samej nazwy hosta w nagłówku lokalizacji odpowiedzi co w żądaniu odbieranym z bramy aplikacji. Dlatego klient wysyła żądanie bezpośrednio do contoso.azurewebsites.net/path2
zamiast przechodzić przez bramę aplikacji (contoso.com/path2
). Pomijanie bramy aplikacji nie jest pożądane.
Ten problem można rozwiązać, ustawiając nazwę hosta w nagłówku lokalizacji na nazwę domeny bramy aplikacji.
Poniżej przedstawiono kroki zastępowania nazwy hosta:
Utwórz regułę ponownego zapisywania z warunkiem, który ocenia, czy nagłówek lokalizacji w odpowiedzi zawiera azurewebsites.net. Wprowadź wzorzec
(https?):\/\/.*azurewebsites\.net(.*)$
.Wykonaj akcję, aby ponownie zapisać nagłówek lokalizacji, tak aby miał nazwę hosta bramy aplikacji. Zrób to, wprowadzając
{http_resp_Location_1}://contoso.com{http_resp_Location_2}
jako wartość nagłówka. Alternatywnie możesz również użyć zmiennejhost
serwera, aby ustawić nazwę hosta tak, aby odpowiadała oryginalnemu żądaniu.
Implementowanie nagłówków HTTP zabezpieczeń w celu zapobiegania lukom w zabezpieczeniach
Możesz naprawić kilka luk w zabezpieczeniach, implementując niezbędne nagłówki w odpowiedzi aplikacji. Te nagłówki zabezpieczeń obejmują X-XSS-Protection, Strict-Transport-Security i Content-Security-Policy. Za pomocą usługi Application Gateway można ustawić te nagłówki dla wszystkich odpowiedzi.
Usuwanie niechcianych nagłówków
Możesz usunąć nagłówki, które ujawniają poufne informacje z odpowiedzi HTTP. Możesz na przykład usunąć informacje, takie jak nazwa serwera zaplecza, system operacyjny lub szczegóły biblioteki. Za pomocą bramy aplikacji można usunąć następujące nagłówki:
Nie można utworzyć reguły ponownego zapisywania w celu usunięcia nagłówka hosta. Jeśli spróbujesz utworzyć regułę ponownego zapisywania z typem akcji ustawionym na usunięcie, a nagłówek ustawiony na host, spowoduje to wystąpienie błędu.
Sprawdzanie obecności nagłówka
Możesz ocenić żądanie HTTP lub nagłówek odpowiedzi pod kątem obecności nagłówka lub zmiennej serwera. Ta ocena jest przydatna, gdy chcesz ponownie napisać nagłówek tylko wtedy, gdy istnieje określony nagłówek.
Typowe scenariusze ponownego zapisywania adresów URL
Wybór ścieżki opartej na parametrach
Aby wykonać scenariusze, w których chcesz wybrać pulę zaplecza na podstawie wartości nagłówka, części adresu URL lub ciągu zapytania w żądaniu, możesz użyć kombinacji funkcji ponownego zapisywania adresów URL i routingu opartego na ścieżkach.
W tym celu utwórz zestaw ponownego zapisywania z warunkiem, który sprawdza określony parametr (ciąg zapytania, nagłówek itp.), a następnie wykonuje akcję, w której zmienia ścieżkę adresu URL (upewnij się, że mapa ścieżki ponownej oceny jest włączona). Zestaw ponownego zapisywania musi być następnie skojarzony z regułą opartą na ścieżkach. Reguła oparta na ścieżce musi zawierać te same ścieżki adresu URL określone w zestawie ponownego zapisywania i odpowiadającej im puli zaplecza.
W związku z tym zestaw ponownego zapisywania umożliwia użytkownikom sprawdzenie określonego parametru i przypisanie jej nowej ścieżki, a reguła oparta na ścieżkach umożliwia użytkownikom przypisywanie pul zaplecza do tych ścieżek. Tak długo, jak jest włączona opcja "Ponowne szacowanie mapy ścieżek", ruch jest kierowany na podstawie ścieżki określonej w zestawie ponownego zapisywania.
Aby zapoznać się z przykładem przypadku użycia przy użyciu ciągów zapytania, zobacz Route traffic using parameter based path selection in portal (Kierowanie ruchem przy użyciu wyboru ścieżki opartej na parametrach w portalu).
Ponowne zapisywanie parametrów ciągu zapytania na podstawie adresu URL
Rozważmy scenariusz witryny internetowej zakupów, w którym widoczny link użytkownika powinien być prosty i czytelny, ale serwer zaplecza potrzebuje parametrów ciągu zapytania, aby wyświetlić właściwą zawartość.
W takim przypadku usługa Application Gateway może przechwytywać parametry z adresu URL i dodawać pary klucz-wartość ciągu zapytania z tych z adresu URL. Załóżmy na przykład, że użytkownik chce ponownie napisać polecenie , https://www.contoso.com/fashion/shirts
https://www.contoso.com/buy.aspx?category=fashion&product=shirts
można to osiągnąć za pomocą następującej konfiguracji ponownego zapisywania adresów URL.
Warunek — jeśli zmienna uri_path
serwera jest równa wzorzec /(.+)/(.+)
Akcja — ustaw ścieżkę adresu URL na buy.aspx
i ciąg zapytania na category={var_uri_path_1}&product={var_uri_path_2}
Aby zapoznać się z przewodnikiem krok po kroku dotyczącym osiągnięcia opisanego powyżej scenariusza, zobacz Ponowne zapisywanie adresu URL w usłudze Application Gateway przy użyciu witryny Azure Portal
Ponowne zapisywanie typowych pułapek konfiguracji
Włączenie opcji "Ponowne ocena mapy ścieżki" nie jest dozwolone dla podstawowych reguł routingu żądań. Zapobiega to nieskończonej pętli ewaluacyjnej dla podstawowej reguły routingu.
Musi istnieć co najmniej 1 reguła ponownego zapisywania warunkowego lub 1 reguła ponownego zapisywania, która nie ma włączonej "Ponowne ocenianie mapy ścieżek" dla reguł routingu opartego na ścieżkach, aby zapobiec nieskończonej pętli oceny dla reguły routingu opartego na ścieżkach.
Żądania przychodzące zostaną zakończone kodem błędu 500 w przypadku, gdy pętla jest tworzona dynamicznie na podstawie danych wejściowych klienta. Usługa Application Gateway nadal obsługuje inne żądania bez żadnego pogorszenia w takim scenariuszu.
Używanie ponownego zapisywania adresu URL lub ponownego zapisywania nagłówka hosta za pomocą zapory aplikacji internetowej (jednostka SKU WAF_v2)
Podczas konfigurowania ponownego zapisywania adresu URL lub ponownego zapisywania nagłówka hosta ocena zapory aplikacji internetowej odbywa się po modyfikacji nagłówka żądania lub parametrów adresu URL (po ponownym zapisaniu). A po usunięciu ponownego zapisywania adresu URL lub ponownego zapisywania nagłówka hosta w usłudze Application Gateway ocena zapory aplikacji internetowej jest wykonywana przed ponownym zapisywaniem nagłówka (ponowne zapisywanie). Ta kolejność gwarantuje, że reguły zapory aplikacji internetowej są stosowane do końcowego żądania, które zostanie odebrane przez pulę zaplecza.
Załóżmy na przykład, że masz następującą regułę ponownego zapisywania nagłówka dla nagłówka "Accept" : "text/html"
— jeśli wartość nagłówka "Accept"
jest równa "text/html"
, zapisz ponownie wartość na "image/png"
.
W tym miejscu tylko po skonfigurowaniu ponownego zapisywania nagłówka ocena zapory aplikacji internetowej jest wykonywana na stronie "Accept" : "text/html"
. Jednak podczas konfigurowania ponownego zapisywania adresu URL lub ponownego zapisywania nagłówka hosta ocena zapory aplikacji internetowej jest wykonywana w systemie "Accept" : "image/png"
.
Ponowne zapisywanie adresów URL a przekierowywanie adresów URL
W przypadku ponownego zapisywania adresu URL usługa Application Gateway ponownie zapisuje adres URL przed wysłaniem żądania do zaplecza. Nie spowoduje to zmiany, które użytkownicy widzą w przeglądarce, ponieważ zmiany są ukryte przed użytkownikiem.
W przypadku przekierowania adresu URL usługa Application Gateway wysyła odpowiedź przekierowania do klienta przy użyciu nowego adresu URL. To z kolei wymaga od klienta ponownego wysłanie żądania do nowego adresu URL podanego w przekierowaniu. Adres URL, który użytkownik widzi w przeglądarce, aktualizuje nowy adres URL.
Ograniczenia
- Ponowne zapisywanie nie jest obsługiwane, gdy brama aplikacji jest skonfigurowana do przekierowywania żądań lub wyświetlania niestandardowej strony błędu.
- Nazwy nagłówków żądania mogą zawierać znaki alfanumeryczne i łączniki. Nazwy nagłówków zawierające inne znaki zostaną odrzucone, gdy żądanie zostanie wysłane do obiektu docelowego zaplecza.
- Nazwy nagłówków odpowiedzi mogą zawierać dowolne znaki alfanumeryczne i określone symbole zgodnie z definicją w dokumencie RFC 7230.
- Nie można przepisać nagłówków połączenia i uaktualnienia
- Ponowne zapisywanie nie jest obsługiwane w przypadku odpowiedzi 4xx i 5xx generowanych bezpośrednio z usługi Application Gateway