Não consigo evitar 504 tempo limite do gateway

1

Para evitar o tempo limite do gateway nginx 504, tentei fazer isso no começo do meu código PHP:

set_time_limit(0);

Além disso, tentei aumentar as configurações de tempo em /etc/php/7.0/fpm/php.ini :

max_execution_time = 3600
max_input_time = 3600

E em /etc/php/7.0/fpm/pool.d/www.conf :

request_terminate_timeout=3600

Depois de reiniciar o nginx, ainda estou recebendo o tempo limite do gateway 504 antes de 3600 segundos em solicitações.

O que mais devo fazer para evitar definitivamente?

    
por cawecoy 16.03.2016 / 18:12

1 resposta

3

O Nginx e o Apache com o desempenho do MPM-Event worker estão usando um daemon dedicado (serviço) para executar o PHP. Você já configurou esse daemon no caminho certo. Mas agora você tem que configurar o servidor web para esperar por um tempo tão longo. A configuração mágica pode ser feita com a configuração fastcgi_read_timeout .

Configure o Nginx para aguardar algum tempo ...

location ~ \.php$ {

  # allow logging
  access_log              /var/log/nginx/access.log vhosts;

  # include defaults
  include                 fastcgi_params;

  # define connection to php-fpm
  fastcgi_keep_conn       on;
  fastcgi_pass            unix:/var/run/php5-fpm.sock;
  fastcgi_index           index.php;

  # php script name
  fastcgi_param           SCRIPT_FILENAME  $document_root$fastcgi_script_name;
  fastcgi_param           SCRIPT_NAME      $fastcgi_script_name;

  # set buffers
  fastcgi_buffer_size             128k;
  fastcgi_buffers                 256 16k;
  fastcgi_busy_buffers_size       256k;
  fastcgi_temp_file_write_size    256k;

  # allow web-server to wait for a long time before giving up
  fastcgi_read_timeout            3600s;

}

Não posso recomendar a ativação dessa configuração para um servidor da web acessível ao público.

Se houver uma tarefa que precise de algum tempo - você deve executar esta tarefa via CLI (interface de linha de comando). Um bom exemplo pode ser a geração de um sitemap.xml do Google de um site enorme.

Exemplo:

Execute o script via linha de comando ...

cd /var/www/mysite/ ; php generateSitemap.php

Defina um cronjob para executar o script diariamente via linha de comando ...

0 4 * * *    cd /var/www/mysite/ ; php generateSitemap.php
    
por 17.03.2016 / 10:28

Tags