2013-04-22 15 views
30

Mam Nginx + uWSGI dla aplikacji Python Django.Limity czasu Nginx, gdy uWSGI długo przetwarza żądanie

Mam następujących w moim nginx.conf:

location/{ 
    include uwsgi_params; 
    uwsgi_pass 127.0.0.1:9001; 
    uwsgi_read_timeout 1800; 
    uwsgi_send_timeout 300; 
    client_header_timeout 300; 
    proxy_read_timeout 300; 
    index index.html index.htm; 
} 

ale przez długi wniosków uruchomiony na uWSGI który trwa około 1 minuty do zakończenia I pojawia się błąd limitu czasu w Nginx dzienniku błędów, jak poniżej:

2013/04/22 12:35:56 [błąd] 2709 # 0: * Upłynął limit 1 wyjścia upstream (110: przekroczenie limitu czasu połączenia) podczas odczytywania nagłówka odpowiedzi od klienta, klienta: xx.xx.xx.xx, serwera:, Żądanie: "GET/entity/datasenders/HTTP/1.1", upstream: "uwsgi: //127.0.0.1: 9001", host: "xxx.xx.xx.x"

Już ustawiłem limit czasu nagłówka i limity czasu wysyłania/odczytu uWSGI na 5 minut, czy ktoś może mi powiedzieć, co mogę zrobić, aby to rozwiązać?

Odpowiedz

49

Konfiguracja, która rozwiązuje ten problem jest:

location/{ 
    include uwsgi_params; 
    uwsgi_pass 127.0.0.1:9001; 
    uwsgi_read_timeout 300; 
    index index.html index.htm; 
} 

Powodem powyższego konfiguracja w pytaniu nie działa dla nas, bo niestety w naszym komputerze wielu ścieżek miał nginx.conf pliku. Pracowaliśmy z conf na złej ścieżce.

Aby prawidłowo zorientować się, która ścieżka Twój nginx jest podniesienie konfigurację z biegu:

nginx -V # V is caps 

będzie to miało --conf-path=[] który powie dokładnie skąd jest podniesienie od konfiguracji.

Niedawno znalazłem powyższe nginx -V, aby nie podać właściwych informacji. Zostawię powyższe na wypadek, gdyby inni uznali to za przydatne.

+1

Co to liczba reprezentująca? sekundy? i czy będzie to problem, jeśli ustawimy go na dużą liczbę, taką jak 2000? – senaps

0

Oprócz odpowiedzi "uwsgi_read_timeout", należy również sprawdzić, czy własność jest poprawna dla twojego katalogu cache nginx uwsgi. Własność musi być ustawiony na ten sam użytkownik, co proces nginx działa ... W moim przypadku musiałem zrobić to

grep '^user' /etc/nginx/nginx.conf 
ls -lah /var/cache/nginx/uwsgi_temp 
for f in $(find /var/cache/nginx/uwsgi_temp); do ls -lah $f; done 

Czy te pliki należące do tego samego użytkownika? Jeśli nie, możesz wyłączyć Nginx i usunąć wszystkie pliki z pamięci podręcznej, upewnij się, że właściwy właściciel jest na/var/cache/nginx/uwsgi_temp i uruchom ponownie. Może mógłbyś po prostu zrobić rekurencyjną chown, nie testowałem tego podejścia.

# store the user 
THEUSER=$(grep '^user' /etc/nginx/nginx.conf | sed 's/.* //; s/;.*//') 

Usuń pamięć podręczną i ponownie podejście

/etc/init.d/nginx stop 
rm -rf /var/cache/nginx/uwsgi_temp/* 
chown $THEUSER:$THEUSER /var/cache/nginx/uwsgi_temp 
/etc/init.d/nginx start 

Recursive chown podejście

chown -R $THEUSER:$THEGROUP /var/cache/nginx/uwsgi_temp/ 
# not sure if you have to restart nginx here... 
Powiązane problemy