[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 초 미만의 요청에 대해 더 이상 시간 초과가 없어야합니다.


답변

링크를 시도하면이 문제를 해결하는 방법에 대한 더 나은 솔루션이 있습니다. 따라서 단계는 다음과 같습니다.

  1. 디렉토리 nginx.conf에있는 파일을 엽니 다 /etc/nginx.
  2. 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;

    참고 : 이미있는 경우 값을 변경하십시오.

  3. 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


답변

이러한 경우 발생할 수있는 세 가지 종류의 시간 초과가 있습니다. 각 답변은 이러한 가능성의 한 측면에만 초점을 맞추고 있음을 알 수 있습니다. 그래서 앞으로 이곳을 방문하는 사람이 답을 무작위로 확인하고 어느 것이 효과가 있는지 모른 채 성공을 거둘 필요가 없도록 적어 두려고했습니다.

  1. 요청자의 요청 시간 초과-시간 초과 헤더를 설정해야합니다 (요청 라이브러리의 헤더 구성 참조).
  2. 요청하는 동안 nginx 에서 시간 초과 (프록시 서버로 전달하기 전) 예 : 거대한 파일 업로드 중
  3. 프록시 서버로 전달한 후 시간 초과 , 서버가 시간 내에 nginx에 응답하지 않습니다. 예 : 서버에서 실행되는 시간 소모적 인 스크립트

따라서 각 문제에 대한 수정 사항은 다음과 같습니다.

  1. 시간 초과 헤더 설정 예 : ajax
$.ajax({
    url: "test.html",
    error: function(){
        // will fire when timeout is reached
    },
    success: function(){
        //do something
    },
    timeout: 3000 // sets timeout to 3 seconds
});

  1. nginx 클라이언트 시간 초과

    http{
         #in seconds
        fastcgi_read_timeout 600;
        client_header_timeout 600;
        client_body_timeout 600;
     }
  2. 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에 대한 추가 지시문 아래의 웹 서버 설정 에서 확인하십시오 .

참조 : Plesk에서 FastCGI 시간 초과 문제를 해결하는 방법?