W moim przypadku byłem niecierpliwy i źle zinterpretowałem dziennik.
W rzeczywistości prawdziwym problemem była komunikacja między nginx i uwsgi, a nie między przeglądarką a nginx. Gdybym załadował stronę w przeglądarce i czekał wystarczająco długo, uzyskałbym „504 - Bad Gateway”. Ale trwało to tak długo, że próbowałem różnych rzeczy, a potem odświeżałem w przeglądarce. Więc nigdy nie czekałem wystarczająco długo, aby zobaczyć błąd 504. Podczas odświeżania w przeglądarce oznacza to, że poprzednie żądanie jest zamykane, a Nginx zapisuje to w dzienniku jako 499.
Opracowanie
Tutaj założę, że czytelnik wie tak mało, jak ja, kiedy zacząłem się bawić.
Moja konfiguracja była odwrotnym proxy, serwerem nginx i serwerem aplikacji, stojącym za nim serwerem uWSGI. Wszystkie żądania od klienta trafiały do serwera nginx, a następnie przekazywane do serwera uWSGI, a następnie odpowiedź była wysyłana w ten sam sposób. Myślę, że tak wszyscy używają nginx / uwsgi i powinni go używać.
Mój nginx działał tak, jak powinien, ale coś było nie tak z serwerem uwsgi. Istnieją dwa sposoby (może więcej), w których serwer uwsgi może nie odpowiedzieć serwerowi nginx.
1) uWSGI mówi: „Przetwarzam, poczekaj, a wkrótce otrzymasz odpowiedź”. nginx ma pewien okres czasu, który jest skłonny czekać, fx 20 sekund. Następnie odpowie klientowi z błędem 504.
2) uWSGI jest martwy lub uWSGi umiera, podczas gdy nginx na to czeka. nginx widzi to od razu iw takim przypadku zwraca błąd 499.
Testowałem moją konfigurację, wysyłając żądania w kliencie (przeglądarce). W przeglądarce nic się nie działo, po prostu wisiało. Po około 10 sekundach (mniej niż upłynął limit czasu) stwierdziłem, że coś jest nie tak (co było prawdą) i zamknąłem serwer uWSGI z wiersza poleceń. Następnie przeszedłem do ustawień uWSGI, spróbowałem czegoś nowego, a następnie ponownie uruchomiłem serwer uWSGI. W momencie zamknięcia serwera uWSGI serwer nginx zwróciłby błąd 499.
Więc nadal debugowałem z błędem 499, co oznacza szukanie w Google błędu 499. Ale gdybym czekał wystarczająco długo, dostałbym błąd 504. Gdybym miał błąd 504, byłbym w stanie lepiej zrozumieć problem, a następnie być w stanie debugować.
A więc wniosek jest taki, że problem był z uWGSI, który ciągle się zawieszał („Poczekaj jeszcze trochę, jeszcze trochę, wtedy będę miał dla ciebie odpowiedź…”).
Jak rozwiązałem ten problem, nie pamiętam. Myślę, że może to być spowodowane wieloma rzeczami.