У меня проблемы с долго работающим сценарием 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.
Спасибо вы