Предотвращение тайм-аута шлюза nginx 504 с помощью PHP set_time_limit()
Я получаю сообщение с 504 тайм-аутами от nginx, когда мой PHP script работает дольше обычного. set_time_limit(0)
, похоже, не мешает этому! Не работает ли он при запуске php5-fpm на nginx? Если да, то каков правильный способ установления временного ограничения?
Ошибка:
504 Gateway Time-out
nginx/1.2.7
Ответы
Ответ 1
Существует несколько способов установить тайм-аут для 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 секунд.
Ответ 2
Попробуйте эту ссылку , у нее есть лучшее решение по ее устранению. Итак, шаги:
- Откройте файл
nginx.conf
, расположенный в каталоге /etc/nginx
.
-
Добавьте этот ниже фрагмент кода в разделе 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;
Примечание. Если он уже присутствует, измените значения в соответствии с.
-
Перезагрузите Nginx и php5-fpm.
$ service nginx reload
$ service php5-fpm reload
Если ошибка повторяется, рассмотрите возможность увеличения значений.
Ответ 3
Вы не можете использовать PHP для предотвращения тайм-аута, выпущенного nginx.
Чтобы настроить nginx, чтобы увеличить время, см. директиву proxy_read_timeout
.
Ответ 4
Правильный ответ увеличивает fastcgi_read_timeout в вашей конфигурации Nginx.
Просто так!
Ответ 5
Поскольку вы используете php-fpm, вы должны использовать fastcgi_finish_request() для обработки запросов, которые, как вы знаете, могут занимать больше времени.
Ответ 6
Использование set_time_limit(0)
бесполезно при использовании php-fpm или аналогичного менеджера процессов.
Нижняя строка не должна использовать set_time_limit
при использовании php-fpm
, чтобы увеличить время ожидания выполнения, проверьте tutorial.
Ответ 7
Вам нужно добавить дополнительную директиву nginx (для 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
В Plesk вы можете добавить его в настройки веб-сервера в разделе Дополнительные директивы nginx.
Для FastCGI проверьте настройки веб-сервера в разделе Дополнительные директивы для HTTP.
Смотрите: Как исправить ошибки тайм-аута FastCGI в Plesk?
Ответ 8
sudo nano /etc/nginx/nginx.conf
Добавьте эти переменные в файл nginx.conf:
proxy_connect_timeout 600;
proxy_send_timeout 600;
proxy_read_timeout 600;
send_timeout 600;
И затем перезапустите:
service nginx reload
Ответ 9
Я решаю эту проблему с конфигурацией APACHE!
Все методы (в этом разделе) неверны для меня... Затем я пытаюсь настроить chanche apache:
Timeout 3600
Затем мой script работает!