QWARTA.RU - индивидуальный подход

► 100% возврат неиспользованных средств. ► Аренда серверов, колокейшн, хостинг, VDS, BackUp. ► Заключение договора с ЮР. лицами! ► Бесплатная помощь в переносе файлов сайта и домена.

FAQ - ошибка 504

Ошибка 504 Gateway Timeout

Ошибка 504 Gateway Timeout является одной из самых популярный ошибок в интернет. Возникает сама по себе или совместно с 502й ошибкой. Появляется в момент повышенной нагрузки на сервере, вызванной большим количеством запросов на сайт или медленной работой скриптов.

При такой ситуации есть несколько способов решения:

  • Установка более мощного сервера
  • Переписать код сайта, чтобы он начал работать быстрее
  • Использовать другие технологии для работы сайта:
    • Можно заменить Apache на Fast-cgi, что может ускорить работу в разы
    • Сверстать сайт в html
    • Использовать кеширование отдаваемого контента
    • Использовать сторонние CDN для отдачи контента
    • Использовать другой язык программирования
  • Разнести сервер на несколько серверов, на одном разместить базу данных, на втором движок сайта. Можно и большее число серверов, но это тема отдельной статьи.
  • Оптимизировать настройки сервера. По умолчанию, настройки сервера не оптимальны, но чтобы правильно их настроить, нужно обратиться к грамотному системному администратору.

Все пять способов решения приводят к дополнительным расходам на переработку софта программистами, работу опытного системного администратора, покупку или модернизацию сервера.

В связке Nginx + Apache(Fast-cgi) бэкенд происходит так:

От посетителя сайта приходит запрос в Nginx, который самостоятельно отдает статику (картинки, java скрипты, css и другие файлы).
Обработка же php запроса уходит в бэкенд (Apache или Fast-cgi) и в этот момент php производит свои вычисления - если это происходит дольше таймаута, установленного в nginx, он выдаст посетителю сайта ошибку 504.

В nginx за это отвечают следующие параметры:

  • keepalive_timeout 75s; # параметр задаёт таймаут, в течение которого keep-alive соединение с клиентом не будет закрыто со стороны сервера
  • proxy_read_timeout 60s; # задаёт таймаут при чтении ответа проксированного сервера от бэкенда

Часто встречается эта ошибка в случае, если у сайта есть «админка» или какие-то скрипты, которые могут долго выполняться, наполняя базу данными. Такие запросы выполняются очень долго и, как результат, получение 504 ошибки, при этом, если посмотреть процессы на сервере видно, что они продолжают обрабатываться и в итоге выполняют все что нужно, но без вывода информации в браузере.

Эту проблему можно решить так:

  • запускать такие скрипты напрямую из SSH или через крон;
  • для определенной папки, например /admin/ сделать в Nginx отдельный location с увеличенными параметрами timeout