Istnieje kilka sposobów ustawienia limitu czasu dla php-fpm. W /etc/php5/fpm/pool.d/www.conf
dodałem tę linię:
request_terminate_timeout = 180
Ponadto /etc/nginx/sites-available/default
dodałem następujący wiersz do bloku lokalizacji danego serwera:
fastcgi_read_timeout 180;
Cały blok lokalizacji wygląda następująco:
location ~ \.php$ {
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_read_timeout 180;
include fastcgi_params;
}
Teraz po prostu zrestartuj php-fpm i nginx i nie powinno być więcej limitów czasu dla żądań trwających mniej niż 180 sekund.
fastcgi_read_timeout
w tymlocation
bloku, nadal kończy się on po 60 sekundach.location
bloku, który obsługuje skrypty php, a nie docroot.Wypróbuj ten link , ma lepsze rozwiązanie, jak to naprawić. Oto kroki:
nginx.conf
plik znajdujący się w/etc/nginx
katalogu.Dodaj poniższy fragment kodu w
http {
sekcji:Uwaga: jeśli jest już obecny, zmień wartości zgodnie z.
Załaduj ponownie Nginx i php5-fpm.
Jeśli błąd nadal występuje, rozważ zwiększenie wartości.
źródło
/etc/nginx/sites-available/mysite.com
.Nie możesz użyć PHP, aby zapobiec przekroczeniu limitu czasu wydanego przez nginx.
Aby skonfigurować nginx, aby dać więcej czasu, zobacz
proxy_read_timeout
dyrektywę .źródło
Prawidłowa odpowiedź to zwiększenie fastcgi_read_timeout w konfiguracji Nginx.
Proste!
źródło
Dodaj te zmienne do pliku nginx.conf:
A następnie uruchom ponownie:
źródło
W takim przypadku mogą wystąpić trzy rodzaje limitów czasu. Można zauważyć, że każda odpowiedź skupia się tylko na jednym aspekcie tych możliwości. Pomyślałem więc, żeby to zapisać, aby ktoś odwiedzający tutaj w przyszłości nie musiał losowo sprawdzać każdej odpowiedzi i odnosić sukcesu, nie wiedząc, która zadziałała.
Tak więc poprawki dla każdego problemu są następujące.
Limit czasu klienta nginx
Limit czasu serwera proxy nginx
Więc użyj tego, którego potrzebujesz. Może w niektórych przypadkach potrzebujesz wszystkich tych konfiguracji. Potrzebowałem.
źródło
Musisz dodać dodatkową dyrektywę nginx (for
ngx_http_proxy_module
) wnginx.conf
, np:Zasadniczo
proxy_read_timeout
dyrektywa nginx zmienia limit czasu serwera proxy,FcgidIOTimeout
jest przeznaczona dla skryptów, które są zbyt ciche, aFcgidBusyTimeout
dla skryptów, których wykonanie trwa zbyt długo.Jeśli używasz aplikacji FastCGI, zwiększ również te opcje:
Następnie przeładuj nginx i PHP5-FPM.
Plesk
W Plesku możesz go dodać w Ustawieniach serwera WWW w sekcji Dodatkowe dyrektywy nginx .
W przypadku FastCGI sprawdź w ustawieniach serwera sieci Web w sekcji Dodatkowe dyrektywy dla protokołu HTTP .
Zobacz: Jak naprawić problemy z przekroczeniem limitu czasu FastCGI w Plesku?
źródło
FcgidBusyTimeout
zmienna nie istnieje tylko dla Apache?Ponieważ używasz php-fpm, powinieneś skorzystać z fastcgi_finish_request () do przetwarzania żądań, o których wiesz, że może to potrwać dłużej.
źródło
Używanie
set_time_limit(0)
jest bezużyteczne podczas korzystania z php-fpm lub podobnego menedżera procesów.Dolna linia nie jest używana
set_time_limit
podczas używaniaphp-fpm
, aby zwiększyć limit czasu wykonania, sprawdź ten samouczek .źródło
Rozwiązuję ten problem z config APACHE! Wszystkie metody (w tym temacie) są dla mnie niepoprawne ... Następnie próbuję chanche apache config:
Timeout 3600
Wtedy mój skrypt zadziałał!
źródło