Я не могу избежать тайм-аута 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