[php] PHP set_time_limit ()를 사용하여 nginx 504 게이트웨이 시간 초과 방지
PHP 스크립트가 평소보다 오래 실행될 때 nginx에서 504 시간 초과 메시지가 표시됩니다. set_time_limit(0)
그것을 막지 않는 것 같습니다! nginx에서 php5-fpm을 실행할 때 작동하지 않습니까? 그렇다면 시간 제한을 설정하는 적절한 방법은 무엇입니까?
오류:
504 Gateway Time-out
nginx/1.2.7
답변
php-fpm에 대한 시간 제한을 설정할 수있는 몇 가지 방법이 있습니다. 에서 /etc/php5/fpm/pool.d/www.conf
나는이 줄을 추가 :
request_terminate_timeout = 180
또한 /etc/nginx/sites-available/default
문제의 서버 위치 블록에 다음 줄을 추가했습니다.
fastcgi_read_timeout 180;
전체 위치 블록은 다음과 같습니다.
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;
}
이제 php-fpm 및 nginx를 다시 시작하면 180 초 미만의 요청에 대해 더 이상 시간 초과가 없어야합니다.
답변
이 링크를 시도하면이 문제를 해결하는 방법에 대한 더 나은 솔루션이 있습니다. 따라서 단계는 다음과 같습니다.
- 디렉토리
nginx.conf
에있는 파일을 엽니 다/etc/nginx
. -
http {
섹션 아래에 코드를 추가 하십시오.client_header_timeout 3000; client_body_timeout 3000; fastcgi_read_timeout 3000; client_max_body_size 32m; fastcgi_buffers 8 128k; fastcgi_buffer_size 128k;
참고 : 이미있는 경우 값을 변경하십시오.
-
Nginx 및 php5-fpm을 다시로드합니다.
$ service nginx reload $ service php5-fpm reload
오류가 지속되면 값을 늘리십시오.
답변
nginx가 발행 한 시간 초과를 방지하기 위해 PHP를 사용할 수 없습니다.
더 많은 시간을 허용하도록 nginx를 구성하려면 proxy_read_timeout
지시문을 참조하십시오 .
답변
정답은 Nginx 구성에서 fastcgi_read_timeout 을 늘리는 것 입니다.
그렇게 간단합니다!
답변
sudo nano /etc/nginx/nginx.conf
nginx.conf 파일에 다음 변수를 추가합니다.
http {
# .....
proxy_connect_timeout 600;
proxy_send_timeout 600;
proxy_read_timeout 600;
send_timeout 600;
}
그런 다음 다시 시작하십시오.
service nginx reload
답변
이러한 경우 발생할 수있는 세 가지 종류의 시간 초과가 있습니다. 각 답변은 이러한 가능성의 한 측면에만 초점을 맞추고 있음을 알 수 있습니다. 그래서 앞으로 이곳을 방문하는 사람이 답을 무작위로 확인하고 어느 것이 효과가 있는지 모른 채 성공을 거둘 필요가 없도록 적어 두려고했습니다.
- 요청자의 요청 시간 초과-시간 초과 헤더를 설정해야합니다 (요청 라이브러리의 헤더 구성 참조).
- 요청하는 동안 nginx 에서 시간 초과 (프록시 서버로 전달하기 전) 예 : 거대한 파일 업로드 중
- 프록시 서버로 전달한 후 시간 초과 , 서버가 시간 내에 nginx에 응답하지 않습니다. 예 : 서버에서 실행되는 시간 소모적 인 스크립트
따라서 각 문제에 대한 수정 사항은 다음과 같습니다.
- 시간 초과 헤더 설정 예 : ajax
$.ajax({
url: "test.html",
error: function(){
// will fire when timeout is reached
},
success: function(){
//do something
},
timeout: 3000 // sets timeout to 3 seconds
});
-
nginx 클라이언트 시간 초과
http{ #in seconds fastcgi_read_timeout 600; client_header_timeout 600; client_body_timeout 600; }
-
nginx 프록시 서버 시간 초과
http{ #Time to wait for the replying server proxy_read_timeout 600s; }
따라서 필요한 것을 사용하십시오. 경우에 따라 이러한 모든 구성이 필요할 수 있습니다. 내가 필요.
답변
에 추가 nginx 지시문 (for ngx_http_proxy_module
) 을 추가해야합니다 nginx.conf
. 예 :
proxy_read_timeout 300;
기본적으로 nginx proxy_read_timeout
지시문은 프록시 시간 제한을 변경하고, FcgidIOTimeout
너무 긴 스크립트를위한 것입니다.FcgidBusyTimeout
하고 실행하는 데 너무 오래 걸리는 스크립트를위한 것입니다.
또한 FastCGI 응용 프로그램을 사용하는 경우 다음 옵션도 늘립니다.
FcgidBusyTimeout 300
FcgidIOTimeout 250
그런 다음 nginx 및 PHP5-FPM을 다시로드하십시오.
플레 스크
Plesk에서는 추가 nginx 지시문 아래의 웹 서버 설정 에 추가 할 수 있습니다 .
FastCGI의 경우 HTTP에 대한 추가 지시문 아래의 웹 서버 설정 에서 확인하십시오 .