Решение проблемы тайм-аута шлюза Nginx 504

Nginx внезапно сообщает об ошибке 504 Gateway Timeout. При использовании PHP для выполнения большого количества запросов к базе данных иногда возникает ошибка 504 Gateway Timeout. Не стоит бояться столкнуться с ошибкой 504 Gateway Timeout. Просто отдельные операции могут вызывать ошибку 504 Gateway Timeout. Обновите страницу тайм-аута, и вы сможете продолжить подключение к базе данных, но это может быть сложнее. Давайте рассмотрим, как решить проблему с ошибкой 504 Gateway Timeout в Nginx.

504 Тайм-аут шлюза

Внезапная ошибка, используя PHP дляПри выполнении большого количества запросов вы можете иногда получать ошибку 504 Gateway Timeout. Не волнуйтесь, если столкнётесь с ошибкой 504 Gateway Timeout. Это может произойти всего из-за нескольких операций. Обновите страницу с информацией о тайм-ауте и продолжите подключение к базе данных. Это немного неудобно. Давайте рассмотрим, как решить проблему с ошибкой 504 Gateway Timeout в Nginx.

К возникновению ошибки 504 на шлюзе обычно приводят следующие ситуации:

  1. Программа веб-сайта обрабатывает большой объем данных, что приводит к длительному времени ожидания и вызывает тайм-аут шлюза 504.
  2. При вызове внешнего запроса в веб-программе возникает тайм-аут шлюза 504 из-за тайм-аута в ответе на внешний запрос.
  3. После сбоя подключения к базе данных SQL программа не была остановлена вовремя, что привело к бесконечному циклу и тайм-ауту шлюза 504.

Проблема тайм-аута шлюза 504 вызвана конфигурацией Nginx., откройте файл конфигурации nginx. Вы можете использоватьилиИнструменты для входа на сервер, первый находится вПоследний вариант — изменить файл через SFTP или SSH.

Изменить конфигурацию nginx

Измените /etc/nginx/ документ.

Добавьте параметры в блок http {}:


fastcgi_connect_timeout 6000;
fastcgi_send_timeout 6000;
fastcgi_read_timeout 6000;

Давайте посмотрим, что делают эти параметры.

fastcgi_connect_timeout

Тайм-аут соединения Fastcgi, по умолчанию 60 секунд

fastcgi_send_timeout

Тайм-аут для отправки запроса процессом nginx процессу fastcgi. Значение по умолчанию — 60 секунд.

fastcgi_read_timeout

Тайм-аут для процесса fastcgi, отправляющего вывод процессу nginx. Значение по умолчанию — 60 секунд.

Кроме того, в nginx естьНастройки параметров тайм-аута.

proxy_connect_timeout 20000;
proxy_send_timeout 20000;
proxy_read_timeout 20000;

proxy_connect_timeout

Тайм-аут соединения Nginx с бэкенд-сервером (тайм-аут соединения через прокси-сервер)

proxy_send_timeout

Время передачи данных внутреннего сервера (тайм-аут отправки агента)

proxy_read_timeout

После успешного подключения время ответа внутреннего сервера (тайм-аут приема прокси)

О тайм-ауте проксиЕсли ваш Nginx не предоставляет услуги внешнего прокси-сервера, вы можете проигнорировать эту часть настройки.

После изменения Nginx используйте nginx -t, чтобы проверить правильность следующих файлов конфигурации, а затем перезапустите службу nginx.

systemctl перезапускает nginx

Изменить конфигурацию PHP

1. Измените файл /etc/php.ini и найдите max_execution_time в файле php.ini (в секундах).

максимальное_время_выполнения
max_execution_time — максимальное время выполнения PHP-скрипта. Значение по умолчанию — 30 секунд. Рекомендуется изменить значение на 300 секунд.

2. В /etc/php-fpm.d В, изменить http://www.conf Файл. Найдите request_terminate_timeout (в секундах).

request_terminate_timeout
Установите таймаут для одного запроса. Рекомендуется установить 6000.

3. Можно добавить в PHP-программу set_time_limit(секунды) Установите максимальное время выполнения

Например: set_time_limit(0) означает отсутствие тайм-аута.

После изменения параметров в PHP перезапустите службу PHP.

systemctl перезапускает php-fpm

Подвести итог

Выше представлен метод изменения тайм-аута шлюза nginx 504, который обычно возникает в среде с большим объемом данных.Благодаря вышеописанному решению, за счёт увеличения периода ожидания, проблема с кодом 504 Gateway временно решена. Наконец, окончательное решение заключается в оптимизации программы и базы данных веб-сайта.

 

счет

Ответить

Ваш адрес электронной почты не будет опубликован. Обязательные поля помечены *