Назад | Перейти на главную страницу

Я не могу избежать тайм-аута шлюза 504

Чтобы избежать тайм-аута шлюза nginx 504, я попытался сделать это в начале своего PHP-кода:

set_time_limit(0);

Также я попытался поднять настройки времени на /etc/php/7.0/fpm/php.ini:

max_execution_time = 3600
max_input_time = 3600

И в /etc/php/7.0/fpm/pool.d/www.conf:

request_terminate_timeout=3600

После перезапуска nginx я по-прежнему получаю тайм-аут шлюза 504 до 3600 секунд на запросы.

Что еще мне нужно сделать, чтобы этого точно избежать?

Nginx и Apache с производительным работником MPM-Event используют выделенный демон (службу) для запуска PHP. Вы уже правильно настроили этот демон. Но теперь вам нужно настроить веб-сервер на такое долгое ожидание. Волшебную настройку можно выполнить с помощью настройки fastcgi_read_timeout.

Настройте Nginx на ожидание ...

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;

}

Я не могу рекомендовать активировать этот параметр для общедоступного веб-сервера.

Если есть задача, на которую нужно время, вы должны выполнить эту задачу через CLI (интерфейс командной строки). Хорошим примером может быть создание Google sitemap.xml огромного веб-сайта.

Пример:

Выполнить скрипт через командную строку ...

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

Определите cronjob для ежедневного выполнения скрипта через командную строку ...

0 4 * * *    cd /var/www/mysite/ ; php generateSitemap.php