Wyświetlasz dokumentację Apigee Edge.
Otwórz dokumentację Apigee X. info
Krótki opis problemu
W odpowiedzi na wywołania interfejsu API aplikacja kliencka otrzymuje kod stanu HTTP 504 z komunikatem Gateway Timeout.
Ten komunikat o błędzie oznacza, że klient nie otrzymał w odpowiednim czasie odpowiedzi z Apigee Edge lub serwera backendu podczas wykonywania wywołania interfejsu API.
Komunikat o błędzie
Aplikacja kliencka otrzymuje ten kod odpowiedzi:
HTTP/1.1 504 Gateway Time-out
Podczas wywoływania takiego serwera proxy za pomocą cURL lub przeglądarki internetowej może pojawić się ten błąd:
<!DOCTYPE html> <html> <head> <title>Error</title> <style> body { width: 35em; margin: 0 auto; font-family: Tahoma, Verdana, Arial, sans-serif; } </style> </head> <body> <h1>An error occurred.</h1> <p>Sorry, the page you are looking for is currently unavailable.<br/> Please try again later.</p> </body> </html>
Co powoduje przekroczenie limitu czasu?
Typowa ścieżka żądania do interfejsu API przez platformę Edge to Klient > Router > Procesor komunikatów > Serwer backendu, jak pokazano na tym rysunku:
Wszystkie komponenty środowiska wykonawczego Apigee Edge, w tym klienci, routery, procesory wiadomości i serwery backendu, są skonfigurowane z odpowiednimi domyślnymi wartościami limitu czasu, aby zapewnić, że żądania API nie będą zbyt długo przetwarzane. Jeśli którykolwiek z komponentów w przepływie nie otrzyma odpowiedzi z komponentu nadrzędnego w okresie określonym w konfiguracji czasu oczekiwania, nastąpi przekroczenie czasu oczekiwania i zwykle zostanie zwrócony 504 Gateway Timeoutbłąd.
Ten scenariusz zawiera informacje o tym, jak rozwiązać problem z błędem 504 spowodowanym przekroczeniem limitu czasu przez router.
Przekroczony czas oczekiwania na routerze
Domyślny czas oczekiwania skonfigurowany na routerach w Apigee Edge to 57 sekund. Jest to maksymalny czas, przez jaki proxy interfejsu API może się wykonywać od momentu otrzymania żądania do interfejsu API przez Edge do momentu odesłania odpowiedzi, w tym odpowiedzi backendu i wszystkich wykonywanych zasad. Domyślny limit czasu można zastąpić na routerach lub hostach wirtualnych, jak opisano w artykule Konfigurowanie limitu czasu wejścia/wyjścia na routerach.
Możliwe przyczyny
W Edge typowe przyczyny błędu 504 Gateway Timeout spowodowanego przekroczeniem limitu czasu routera to:
| Przyczyna | Opis | Instrukcje rozwiązywania problemów dotyczące |
|---|---|---|
| Nieprawidłowa konfiguracja limitu czasu na routerze | Dzieje się tak, gdy router jest skonfigurowany z nieprawidłowym okresem limitu czasu wejścia/wyjścia. | Użytkownicy publicznej i prywatnej chmury Edge |
Typowe etapy diagnostyki
Aby zdiagnozować ten błąd, użyj jednego z tych narzędzi lub technik:
- Monitorowanie interfejsów API
- Logi dostępu NGINX
Monitorowanie interfejsów API
Aby zdiagnozować błąd za pomocą monitorowania interfejsu API:
- Otwórz stronę Analiza > Monitorowanie interfejsu API > Zbadaj.
- Filtruj błędy
5xxi wybierz okres. - Wykreśl Kod stanu na osi Czas.
-
Kliknij konkretną komórkę z błędami
504, aby wyświetlić więcej szczegółów i zobaczyć logi tych błędów, jak pokazano poniżej:Przykład pokazujący błędy 504

- W panelu po prawej stronie kliknij Wyświetl logi.

W oknie Logi o ruchu zwróć uwagę na te szczegóły dotyczące niektórych błędów
504:- Żądanie: zawiera metodę żądania i identyfikator URI używane do wykonywania połączeń.
- Odpowiedź Czas: łączny czas trwania żądania.
W przykładzie powyżej
- Żądanie wskazuje na
GET /test-timeout. - Czas odpowiedzi wynosi
57.001s. Oznacza to, że router przekroczył limit czasu, zanim procesor komunikatów mógł odpowiedzieć, ponieważ wartość jest bardzo zbliżona do domyślnego limitu czasu wejścia-wyjścia ustawionego na routerze, który wynosi 57 sekund.
Wszystkie logi możesz też uzyskać za pomocą interfejsu API Monitoring GET logs. Na przykład wysyłając zapytanie do dzienników o wartości
org,env,timeRangeistatus, możesz pobrać wszystkie dzienniki transakcji, w których klient przekroczył limit czasu.W przypadku tych
504błędów monitorowanie interfejsu API ustawia wartość proxy na-(not set), dlatego możesz użyć interfejsu API (Logs API), aby uzyskać powiązany serwer proxy dla hosta wirtualnego i ścieżki.Na przykład:
curl "https://apimonitoring.enterprise.apigee.com/logs/apiproxies?org=ORG&env=ENV&select=https
- Sprawdź Czas odpowiedzi, aby uzyskać dodatkowe informacje o błędach
504, i upewnij się, że Czas odpowiedzi jest spójny (wartość limitu czasu wejścia/wyjścia ustawiona na routerze, czyli 57 sekund) we wszystkich błędach504.
Logi dostępu NGINX
Aby zdiagnozować błąd za pomocą dzienników dostępu NGINX:
- Sprawdź logi dostępu serwera NGINX:
/opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_log - Sprawdź, czy w określonym czasie wystąpiły jakieś
504błędy (jeśli problem pojawił się w przeszłości) lub czy nadal występują błędy w przypadku niektórych żądań504. - Poniżej znajdziesz informacje o niektórych błędach
504:- Czas odpowiedzi
- Identyfikator URI żądania

W tym przykładzie widzimy te informacje:
-
Czas żądania:
57.001sekundy. Oznacza to, że router przekroczył limit czasu po 57,001 sekundach. - Prośba:
GET /test-timeout - Alias hosta:
myorg-test.apigee.net
-
Sprawdź, czy czas żądania jest taki sam jak limit czasu wejścia/wyjścia skonfigurowany na routerze lub hoście wirtualnym. Jeśli tak, oznacza to, że router przekroczył limit czasu, zanim procesor komunikatów odpowiedział w tym okresie.
W przykładzie wpisu logu NGINX powyżej czas żądania wynoszący
57.001sekundy jest bardzo zbliżony do domyślnego limitu czasu wejścia-wyjścia ustawionego w routerze. Wyraźnie wskazuje to, że router przekroczył limit czasu, zanim procesor wiadomości mógł odpowiedzieć. - Określ proxy interfejsu API, do którego zostało wysłane żądanie, korzystając ze ścieżki podstawowej w polu Żądanie .
Przyczyna: nieprawidłowa konfiguracja limitu czasu na routerze
Diagnostyka
- Sprawdź, czy błędy
504są spowodowane przekroczeniem limitu czasu przez router, zanim procesor komunikatów zdążył odpowiedzieć. Możesz to zrobić, sprawdzając, czy czas odpowiedzi w monitorowaniu interfejsu API lub czas żądania w routerze (oba pola zawierają te same informacje, ale mają różne nazwy) jest taki sam jak limit czasu wejścia/wyjścia skonfigurowany w routerze lub hoście wirtualnym, a pola Źródło błędu, Proxy błędu i Kod błędu mają wartość-. Możesz to sprawdzić za pomocą monitorowania interfejsu API lub dzienników dostępu NGINX, jak opisano w często wykonywanych czynnościach diagnostycznych. -
Sprawdź, czy wartość limitu czasu wejścia/wyjścia skonfigurowana na routerze lub konkretnym hoście wirtualnym jest niższa niż wartość skonfigurowana na procesorze komunikatów lub konkretnym proxy interfejsu API.
Aby to zrobić, wykonaj czynności opisane w tej sekcji.
Sprawdzanie limitu czasu operacji wejścia/wyjścia na hostach wirtualnych
Interfejs Edge
Aby sprawdzić limit czasu hosta wirtualnego za pomocą interfejsu Edge:
- Zaloguj się w interfejsie Edge.
- Kliknij Administracja > Hosty wirtualne.
- Wybierz konkretne środowisko, w którym występuje problem z przekroczeniem limitu czasu.
- Wybierz konkretny host wirtualny, dla którego chcesz sprawdzić wartość limitu czasu operacji wejścia/wyjścia.
- W sekcji Usługi sprawdź wartość Limit czasu odczytu proxy w sekundach.

W powyższym przykładzie limit czasu odczytu serwera proxy ma wartość
120. Oznacza to, że limit czasu wejścia/wyjścia skonfigurowany na tym hoście wirtualnym wynosi 120 sekund.
Interfejsy API do zarządzania
Możesz też sprawdzić limit czasu odczytu proxy za pomocą tych interfejsów API do zarządzania:
-
Wykonaj wywołanie interfejsu API Pobierz hosta wirtualnego, aby uzyskać konfigurację
virtualhost, jak pokazano poniżej:Użytkownik chmury publicznej
curl -v -X GET https://api.enterprise.apigee.com/v1/organizations/ORGANIZATION_NAME/environments/ENVIRONMENT_NAME/virtualhosts/VIRTUALHOST_NAME -u USERNAME
Użytkownik chmury Private Cloud
curl -v -X GET http://MANAGEMENT_SERVER_HOST:PORT#/v1/organizations/ORGANIZATION_NAME/environments/v/virtualhosts/VIRTUALHOST_NAME -u USERNAME
Gdzie:
ORGANIZATION_NAME to nazwa organizacji.
ENVIRONMENT_NAME to nazwa środowiska
VIRTUALHOST_NAME to nazwa hosta wirtualnego.
-
Sprawdź wartość skonfigurowaną dla właściwości
proxy_read_timeout.Przykładowa definicja hosta wirtualnego
{ "hostAliases": [ "api.myCompany,com", ], "interfaces": [], "listenOptions": [], "name": "secure", "port": "443", "retryOptions": [], "properties": { "property": [ { "name": "proxy_read_timeout", "value": "120" } ] }, "sSLInfo": { "ciphers": [], "clientAuthEnabled": "false", "enabled": "true", "ignoreValidationErrors": false, "keyAlias": "myCompanyKeyAlias", "keyStore": "ref://myCompanyKeystoreref", "protocols": [] }, "useBuiltInFreeTrialCert": false }W przykładzie powyżej parametr
proxy_read_timeoutma wartość120. Oznacza to, że limit czasu wejścia/wyjścia skonfigurowany na tym hoście wirtualnym wynosi 120 sekund.
Sprawdzanie limitu czasu wejścia/wyjścia w pliku router.properties
- Zaloguj się na komputerze z routerem.
- Wyszukaj właściwość
proxy_read_timeoutw katalogu/opt/nginx/conf.di sprawdź, czy ma ona nową wartość:grep -ri "proxy_read_timeout" /opt/nginx/conf.d
-
Sprawdź wartość ustawioną dla właściwości
proxy_read_timeoutw konkretnym pliku konfiguracji hosta wirtualnego.Przykładowy wynik polecenia grep
/opt/nginx/conf.d/0-default.conf:proxy_read_timeout 57; /opt/nginx/conf.d/0-edge-health.conf:proxy_read_timeout 1s;
W przykładzie powyżej zwróć uwagę, że właściwość
proxy_read_timeoutzostała ustawiona na nową wartość57w pliku0-default.conf, który jest plikiem konfiguracyjnym domyślnego hosta wirtualnego. Oznacza to, że limit czasu wejścia/wyjścia jest skonfigurowany na 57 sekund na routerze dla domyślnego hosta wirtualnego. Jeśli masz wiele hostów wirtualnych, zobaczysz te informacje dla każdego z nich. Uzyskaj wartośćproxy_read_timeoutdla konkretnego hosta wirtualnego, którego używasz do wywoływania interfejsu API, które zakończyły się niepowodzeniem z błędami504.
Weryfikowanie limitu czasu wejścia/wyjścia w proxy interfejsu API
Limit czasu operacji wejścia/wyjścia możesz sprawdzić w tych miejscach:
- Docelowy punkt końcowy proxy interfejsu API
- Zasady ServiceCallout serwera proxy interfejsu API
Wyświetlanie limitu czasu wejścia/wyjścia w docelowym punkcie końcowym proxy interfejsu API
- W interfejsie Edge wybierz konkretny serwer proxy interfejsu API, w którym chcesz wyświetlić wartość limitu czasu wejścia/wyjścia.
- Wybierz konkretny docelowy punkt końcowy, który chcesz sprawdzić.
- W konfiguracji
TargetEndpointw elemencie<HTTPTargetConnection>znajdź właściwośćio.timeout.millisz odpowiednią wartością.Na przykład limit czasu operacji wejścia/wyjścia w tym kodzie jest ustawiony na 120 sekund:
<Properties> <Property name="io.timeout.millis">120000</Property> </Properties>
Wyświetlanie limitu czasu wejścia/wyjścia w zasadach ServiceCallout serwera proxy interfejsu API
- W interfejsie Edge wybierz konkretny serwer proxy interfejsu API, w którym chcesz wyświetlić nową wartość limitu czasu wejścia/wyjścia w przypadku zasady ServiceCallout.
- Wybierz konkretne zasady ServiceCallout, które chcesz sprawdzić.
-
W konfiguracji
<ServiceCallout>znajdź element<Timeout>z odpowiednią wartością.Na przykład limit czasu operacji wejścia/wyjścia w przypadku poniższego kodu wyniesie 120 sekund:
<Timeout>120000</Timeout>
Weryfikowanie limitu czasu wejścia/wyjścia na procesorach wiadomości
- Zaloguj się na komputerze z procesorem komunikatów.
-
Wyszukaj właściwość
HTTPTransport.io.timeout.millisw katalogu/opt/apigee/edge-message-processor/confza pomocą tego polecenia:grep -ri "HTTPTransport.io.timeout.millis" /opt/apigee/edge-message-processor/conf
Przykładowe dane wyjściowe
/opt/apigee/edge-message-processor/conf/http.properties:HTTPTransport.io.timeout.millis=55000
- W przykładzie danych wyjściowych powyżej zwróć uwagę, że właściwość
HTTPTransport.io.timeout.millisma wartość55000whttp.properties. Oznacza to, że limit czasu wejścia/wyjścia został prawidłowo skonfigurowany na 55 sekund w procesorze komunikatów.
Po określeniu limitu czasu skonfigurowanego na routerze i procesorze komunikatów sprawdź, czy router lub host wirtualny ma skonfigurowaną niższą wartość limitu czasu niż procesor komunikatów lub proxy interfejsu API.
Zanotuj wartości ustawione we wszystkich warstwach, jak pokazano w tabeli poniżej:
| Limit czasu na routerze (sekundy) | Limit czasu na hoście wirtualnym (w sekundach) | Limit czasu oczekiwania na procesor komunikatów (sekundy) | Limit czasu proxy interfejsu API (sekundy) |
|---|---|---|---|
| 57 | - | 55 | 120 |
W tym przykładzie
- Na routerze skonfigurowano domyślną wartość 57 sekund.
- Wartość limitu czasu nie jest ustawiona w konkretnym hoście wirtualnym. Oznacza to, że będzie używać wartości domyślnej 57 sekund skonfigurowanej na samym routerze.
- W procesorze komunikatów skonfigurowano wartość domyślną 55 sekund.
- Jednak w przypadku konkretnego proxy interfejsu API skonfigurowano wartość 120 sekund.
Pamiętaj, że wyższa wartość limitu czasu jest skonfigurowana tylko w przypadku proxy interfejsu API, ale router nadal ma skonfigurowany limit 57 sekund. Dlatego router przekracza limit czasu po 57 sekundach, podczas gdy procesor wiadomości lub backend nadal przetwarza Twoją prośbę. W takim przypadku router odpowiada aplikacji klienckiej błędem 504 Gateway Timeout.
Rozdzielczość
Aby rozwiązać ten problem, wykonaj te czynności, aby skonfigurować odpowiedni limit czasu wejścia/wyjścia na routerze i procesorze wiadomości.
- Aby dowiedzieć się, jakie wartości limitu czasu należy ustawić w różnych komponentach biorących udział w przepływie żądania do interfejsu API przez Apigee Edge, zapoznaj się z sprawdzonymi metodami konfigurowania limitu czasu wejścia/wyjścia.
- W powyższym przykładzie, jeśli stwierdzisz, że należy ustawić wyższą wartość limitu czasu, ponieważ serwer backendu wymaga więcej czasu, i zwiększysz wartość limitu czasu procesora komunikatów do 120 sekund, ustaw wyższą wartość limitu czasu, np.
123 seconds, na routerze. Aby uniknąć wpływu nowego limitu czasu na wszystkie serwery proxy interfejsu API, ustaw wartość123 secondstylko na konkretnym hoście wirtualnym używanym w danym serwerze proxy interfejsu API. - Aby ustawić limit czasu na hoście wirtualnym, postępuj zgodnie z instrukcjami w artykule Konfigurowanie limitu czasu wejścia/wyjścia na routerach.