Я не могу избежать тайм-аута 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 секунд на запросы.

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

1 ответ

Решение

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
Другие вопросы по тегам