Obecnie otrzymuję dość duży zalew HTTP, co powoduje, że moje odwrotne proxy nginx wytwarza 502 Złą Bramę.
Mam serwer frontonu z nginxem jako serwerem proxy do mojego serwera backend, ale dostaję mnóstwo connect() failed (110: Connection timed out) while connecting to upstream
błędów. Mnóstwo ich. Jeśli pominę serwer proxy, aby połączyć się z backendem, mogę dobrze uruchomić witrynę, dzięki czemu wiem, że jest gdzieś w odwrotnym proxy. Nie mam jednak pojęcia, jak ustalić, dlaczego upłynął limit czasu.
Jakaś pomoc?
działający nginx 1.2.3 na CentOS 6.2
nginx
reverse-proxy
Obrabować
źródło
źródło
Odpowiedzi:
Zakładam, że podłączyłeś już swój poziom rejestrowania błędów Nginx do debugowania. Jeśli nie, zacznij od tego.
Twój najlepszy zakład prawdopodobnie będzie używany
strace
do przeglądania wywołań systemowych wykonywanych przez Nginx. W szczególności należy zwracać uwagę naconnect()
połączenia iman 2 connect
sprawdzać ich kody powrotne (tutaj może być Twój przyjaciel).Po uzyskaniu tych informacji możesz lepiej odgadnąć, czy problem ogranicza się do serwera proxy frontonu, czy ma coś wspólnego z interakcjami między serwerem proxy a serwerem aplikacji backendu.
źródło
Nie robi się o wiele bardziej pedantyczny niż ten, chyba że chcesz umieścić sondy dtrace:
Ustaw poziom dziennika debugowania: /etc/nginx/nginx.conf:
Skonfiguruj tcpdump w innym oknie:
Monitoruj pliki dziennika w innym oknie:
Uruchom nginx interaktywnie za pomocą strace:
I wtedy
Dalsze debugowanie można przeprowadzić za pomocą skompilowanego nginx
--with-debug
. Sprawdź, uruchamiając:Innym dobrym modułem, który nie jest kompilowany domyślnie jest: HttpStubStatusModule . Najprawdopodobniej każda przyzwoita konfiguracja będzie wymagała skompilowanego na zamówienie nginx (wysoce zalecane opakowanie przy użyciu narzędzi do pakowania distro).
Większość z nich nie nadaje się do użytku produkcyjnego, spójrz na kompilowanie nginx z gperf, jeśli potrzebujesz więcej statystyk.
źródło
Wygląda na to, że debugujesz witrynę o dużym ruchu.
Użyj
debug
zdebug_connection
dyrektywą, aby dziennik błędów nginx wyświetlał dzienniki debugowania tylko z twojego adresu IP.Gdy zaczniesz widzieć przydatne dzienniki błędów zamiast aktywować opcję debugowania dla całej konfiguracji nginx, dodaj osobną
error_log /path/to/some/file/ debug;
dyrektywę wlocation {..}
bloku odpowiedzialnym za połączenie reverse_proxy.W ten sposób będziesz mógł odizolować dziennik błędów debugowania tylko od adresu IP.
Spróbuj powiązać to z żądaniem, które wysyłasz (z poziomu przeglądarki).
Na przykład sprawdź: https://easyengine.io/tutorials/nginx/debugging/
Na wyższym poziomie możesz użyć HttpEchoModule Nginx
źródło
Nigdy nie uważałem Nginx za wąskie gardło, w większości przypadków jest ono bardziej niż zdolne niż zaplecze. Ale jeśli testowałeś bez Nginx i nie znalazłeś błędu, to będzie jeden (lub oba):
Nie widząc twoich konfiguracji Nginx, nikt nie może komentować tego pierwszego. I bez odpowiednich wyników z systemu operacyjnego nikt nie może komentować tego ostatniego.
źródło