Nginx + Php -fpm fastcgi upstream timed out - PullRequest
       88

Nginx + Php -fpm fastcgi upstream timed out

0 голосов
/ 13 января 2020

У меня проблемы с долго работающим сценарием PHP:

<?php
sleep(70); # extend 60s
phpinfo();

, который завершается каждый раз через 60 секунд с ответом 504 Gateway Time-out от Nginx.

Когда я проверяю ошибки Nginx, я вижу, что время ожидания запроса истекло:

... [error] 1312#1312: *2023 upstream timed out (110: Connection timed out) while reading response header from upstream, ... , upstream: "fastcgi://unix:/run/php/php7.0-fpm.sock", ...

Я просмотрел соответствующие вопросы и попытался увеличить время ожидания, создав файл /etc/nginx/conf.d/timeout.conf с следующее содержание:

proxy_connect_timeout 600;
proxy_send_timeout 600;
proxy_read_timeout 600;
send_timeout 600;
fastcgi_read_timeout 600;
fastcgi_send_timeout 600;
fastcgi_connect_timeout 600;

Я также прочитал документацию Nginx для обоих модулей fastcgi и core , ища любые конфигурации со значениями по умолчанию, установленными на 60 секунд.

Я исключил client_* таймауты, потому что они возвращают HTTP 408 вместо HTTP 504 ответов.

Это моя Nginx часть конфигурации сервера FastCGI:

location ~ \.php$ {
    fastcgi_pass unix:/run/php/php7.0-fpm.sock;
    include fastcgi_params;
}

Из того, что я читал до сих пор, похоже, что проблема не в PHP, а Nginx - виноват в тайм-ауте. Тем не менее, я попытался изменить ограничения и в PHP:

Мои значения из phpinfo():

default_socket_timeout=600
max_execution_time=300
max_input_time=-1
memory_limit=512M

В конфигурации пула php -pm также включены следующие параметры :

catch_workers_output = yes
request_terminate_timeout = 600

В журналах php -fpm ничего нет.

Я также использую балансировщик нагрузки Amazon для маршрутизации на сервер, но настройка времени ожидания также увеличена с по умолчанию 60 секунд .

Я не знаю, где еще искать, во время всех изменений я перезапустил и php -fpm, и nginx.

Спасибо вы

1 Ответ

0 голосов
/ 14 января 2020

Как это происходит в этих случаях, я на самом деле редактировал неправильный файл конфигурации, который не был загружен Nginx.

Добавление следующего к правильному файлу добилось цели:

fastcgi_read_timeout 600;
fastcgi_send_timeout 600;
fastcgi_connect_timeout 600;
...