Ошибки Nginx и как их исправить

Как исправить ошибки Nginx: 502, 504, 413.

При работе с веб-сервером Nginx иногда возникают ошибки, которые мешают корректной работе сайта. В этой статье мы разберём наиболее распространённые из них: 502 Bad Gateway, 504 Gateway Time-out и 413 Request Entity Too Large, и покажем, как их устранять на VPS или выделенных серверах.

502 Bad Gateway

Что значит: Nginx не может получить ответ от бэкенда (PHP-FPM, Apache, Node.js, uWSGI и т.д.).
Самые частые причины:

  • Сервис бэкенда выключен или упал
  • Неправильный путь к сокету или порт в конфиге
  • Проблемы с правами доступа к сокету
  • Недостаточно памяти/процессов у PHP-FPM

Как исправить:

  1. Проверьте статус PHP-FPM (или другого бэкенда):
sudo systemctl status php-fpm
# или для конкретной версии
sudo systemctl status php8.1-fpm
  1. Перезапустите сервис:
sudo systemctl restart php-fpm
# или php8.1-fpm
  1. Проверьте путь к сокету в конфиге Nginx и PHP-FPM:

    • Nginx: fastcgi_pass unix:/run/php/php8.1-fpm.sock;
    • PHP-FPM (/etc/php/8.1/fpm/pool.d/www.conf): listen = /run/php/php8.1-fpm.sock
  2. Убедитесь в правильных правах:

sudo chown www-data:www-data /run/php/php8.1-fpm.sock
sudo chmod 660 /run/php/php8.1-fpm.sock
  1. Перезапустите Nginx:
sudo nginx -t && sudo systemctl reload nginx

504 Gateway Time-out

Что значит: Nginx ждал ответа от бэкенда слишком долго и прервал соединение.
Самые частые причины:

  • Долгая обработка PHP-скрипта
  • Медленная база данных
  • Большая загрузка сервера

Как исправить:

  1. Увеличьте таймауты в конфиге сайта (в блоке server или location):
proxy_connect_timeout 300s;
proxy_send_timeout 300s;
proxy_read_timeout 300s;
fastcgi_read_timeout 300s;  # для PHP
  1. Оптимизируйте PHP-FPM (в /etc/php/8.1/fpm/pool.d/www.conf):
pm.max_children = 50          # увеличьте по необходимости
pm.start_servers = 10
pm.min_spare_servers = 5
pm.max_spare_servers = 20
request_terminate_timeout = 300
  1. Перезапустите сервисы:
sudo systemctl restart php-fpm
sudo systemctl reload nginx
  1. Если проблема в конкретном скрипте — оптимизируйте запросы к БД или кэшируйте тяжёлые страницы.

413 Request Entity Too Large

Что значит: Клиент пытается загрузить файл больше лимита, установленного в Nginx. По умолчанию — 1 МБ.
Причины: загрузка больших файлов (фото, видео, бэкапы, архивы).

Как исправить:

  1. В конфиге сайта (или в /etc/nginx/nginx.conf в блоке http) увеличьте лимит:
client_max_body_size 64M;  # или 128M, 512M, 1G и т.д.
  1. Перезапустите Nginx:
sudo nginx -t && sudo systemctl reload nginx
  1. Для PHP также увеличьте лимиты в php.ini (/etc/php/8.1/fpm/php.ini):
upload_max_filesize = 64M
post_max_size = 64M

Перезапустите PHP-FPM:

sudo systemctl restart php-fpm

Как перезагрузить Nginx правильно

  • Проверка конфигурации (всегда перед перезапуском):
sudo nginx -t
  • Плавная перезагрузка (без прерывания соединений):
sudo systemctl reload nginx

или

sudo nginx -s reload

Полный перезапуск (если reload не помог):

sudo systemctl restart nginx

Полезные замечания

  • Всегда делайте бэкап конфигов перед изменениями: sudo cp /etc/nginx/nginx.conf /etc/nginx/nginx.conf.bak
  • После любых изменений проверяйте логи: /var/log/nginx/error.log и /var/log/nginx/access.log

Помощь

Если у вас возникли вопросы или требуется помощь, пожалуйста, свяжитесь с нами через систему тикетов — мы обязательно вам поможем!

Нужна помощь?Наши инженеры бесплатно помогут с любым вопросом за считанные минутыНаписать нам