Mam Puma działającą jako nadrzędny serwer aplikacji i Riak jako mój klaster bazy danych w tle. Kiedy wysyłam żądanie, które mapuje, zmniejsza porcję danych dla około 25 000 użytkowników i zwraca je z Riaka do aplikacji, pojawia się błąd w dzienniku Nginx:
Upstream przekroczył limit czasu (110: przekroczono limit czasu połączenia) podczas odczytu nagłówka odpowiedzi z nadawcy
Jeśli zapytam mojego upstream bezpośrednio bez serwera proxy Nginx, z tym samym żądaniem, otrzymam wymagane dane.
Limit czasu Nginx następuje po umieszczeniu serwera proxy.
**nginx.conf**
http {
keepalive_timeout 10m;
proxy_connect_timeout 600s;
proxy_send_timeout 600s;
proxy_read_timeout 600s;
fastcgi_send_timeout 600s;
fastcgi_read_timeout 600s;
include /etc/nginx/sites-enabled/*.conf;
}
**virtual host conf**
upstream ss_api {
server 127.0.0.1:3000 max_fails=0 fail_timeout=600;
}
server {
listen 81;
server_name xxxxx.com; # change to match your URL
location / {
# match the name of upstream directive which is defined above
proxy_pass http://ss_api;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_cache cloud;
proxy_cache_valid 200 302 60m;
proxy_cache_valid 404 1m;
proxy_cache_bypass $http_authorization;
proxy_cache_bypass http://ss_api/account/;
add_header X-Cache-Status $upstream_cache_status;
}
}
Nginx ma kilka dyrektyw limitu czasu. Nie wiem, czy brakuje mi czegoś ważnego. Każda pomoc byłaby bardzo mile widziana ....
Odpowiedzi:
Dzieje się tak, ponieważ nadrzędny strumień zajmuje zbyt wiele czasu, aby odpowiedzieć na żądanie, a NGINX uważa, że nadrzędny już nie mógł przetworzyć żądania, więc odpowiada z błędem. Po prostu dołącz i zwiększ proxy_read_timeout w
location
bloku konfiguracyjnym. To samo przytrafiło się mnie i użyłem 1-godzinnego limitu czasu dla wewnętrznej aplikacji w pracy:Dzięki temu NGINX będzie czekał godzinę (3600 s), aż jego serwer nadrzędny zwróci coś.
źródło
proxy_read_timeout
w http sekcji nie może pomóc. Mamproxy_pass
dyrektywę w sekcji lokalizacji i tylko tamproxy_read_timeout
ustawienie miało znaczenie. (nginx 1.16.0)Powinieneś zawsze powstrzymywać się od zwiększania limitów czasu, wątpię, czy czas odpowiedzi serwera zaplecza jest tutaj problemem w każdym przypadku.
Obejrzałem ten problem, usuwając flagę utrzymywania połączenia i określając wersję http zgodnie z odpowiedzią tutaj: https://stackoverflow.com/a/36589120/479632
Niestety nie mogę wyjaśnić, dlaczego to działa i nie udało mi się go rozszyfrować na podstawie dokumentów wymienionych w odpowiedzi, do której prowadzą linki, więc jeśli ktoś ma wyjaśnienie, byłbym bardzo zainteresowany, aby je usłyszeć.
źródło
proxy_read_timeout
jeśli wiesz, że serwer proxy (nawet dla określonego adresu URL) wymaga więcej czasu przetwarzania?$http_host
prawo? Zgaduję, że to nie poleciałoby dla https. Mogą być wymagane dodatkowe ustawienia również do przekazywania żądań https.Najpierw dowiedz się, który upstream zwalnia, sprawdzając plik dziennika błędów nginx i odpowiednio dostosuj czas odczytu w moim przypadku był to fastCGI
Więc muszę dostosować fastcgi_read_timeout w mojej konfiguracji serwera
Zobacz: oryginalny post
źródło
W twoim przypadku pomaga to trochę w optymalizacji serwera proxy lub możesz użyć „# ustawień limitu czasu”
źródło
proxy_pass
w sekcji lokalizacji .Myślę, że ten błąd może wystąpić z różnych powodów, ale może być specyficzny dla modułu, którego używasz. Na przykład widziałem to używając modułu uwsgi, więc musiałem ustawić "uwsgi_read_timeout".
źródło
Poleciłbym przyjrzeć się
error_logs
, szczególnie części upstream, gdzie pokazuje konkretny upstream, który wygasa.Następnie w oparciu o które można dostosować
proxy_read_timeout
,fastcgi_read_timeout
albouwsgi_read_timeout
.Upewnij się również, że Twoja konfiguracja została załadowana.
Więcej szczegółów tutaj Upstream upłynął limit czasu Nginx (dlaczego i jak to naprawić)
źródło
Jak wielu innych wskazało tutaj, zwiększenie ustawień limitu czasu dla NGINX może rozwiązać problem.
Jednak zwiększenie ustawień limitu czasu może nie być tak proste, jak sugeruje wiele z tych odpowiedzi. Sam napotkałem ten problem i próbowałem zmienić ustawienia limitu czasu w pliku /etc/nginx/nginx.conf , jak sugerują prawie wszyscy w tych wątkach. Ani trochę mi to nie pomogło; nie było widocznej zmiany w ustawieniach limitu czasu NGINX. Teraz, wiele godzin później, w końcu udało mi się rozwiązać ten problem.
Rozwiązanie znajduje się w tym wątku na forum i jest napisane, że powinieneś umieścić ustawienia limitu czasu w /etc/nginx/conf.d/timeout.conf (a jeśli ten plik nie istnieje, powinieneś go utworzyć). Użyłem tych samych ustawień co sugerowane w wątku:
źródło
Miałem ten sam problem i okazało się, że był to „codzienny” błąd w kontrolerze szyn. Nie wiem dlaczego, ale na produkcji puma raz po raz uruchamia błąd powodując komunikat:
Upstream przekroczył limit czasu (110: przekroczono limit czasu połączenia) podczas odczytu nagłówka odpowiedzi z nadawcy
Prawdopodobnie dlatego, że Nginx nieustannie próbuje pobrać dane z pumy.
Sprawdź plik dziennika / puma.stderr.log, aby zobaczyć, czy tak jest.
źródło
Z naszej strony używał spdy z pamięcią podręczną proxy. Po wygaśnięciu pamięci podręcznej otrzymujemy ten błąd, dopóki pamięć podręczna nie zostanie zaktualizowana.
źródło
Mam nadzieję, że to komuś pomoże: napotkałem ten błąd, a przyczyną było złe pozwolenie na folder dziennika dla phpfpm, po zmianie go, aby phpfpm mógł do niego pisać, wszystko było w porządku.
źródło
Aby uzyskać
proxy_upstream
limit czasu, wypróbowałem powyższe ustawienie, ale te nie zadziałały.Ustawienie
resolver_timeout
działało dla mnie, wiedząc, że wygenerowanie komunikatu o przekroczeniu limitu czasu przesyłania danych zajęło 30 sekund. Np. Me.atwibble.com nie może zostać rozwiązane (110: przekroczono limit czasu operacji) .http://nginx.org/en/docs/http/ngx_http_core_module.html#resolver_timeout
źródło