Предотвращение тайм-аута шлюза 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 работает!