Ошибки 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
Как исправить:
- Проверьте статус PHP-FPM (или другого бэкенда):
sudo systemctl status php-fpm
# или для конкретной версии
sudo systemctl status php8.1-fpm
- Перезапустите сервис:
sudo systemctl restart php-fpm
# или php8.1-fpm
-
Проверьте путь к сокету в конфиге 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
- Nginx:
-
Убедитесь в правильных правах:
sudo chown www-data:www-data /run/php/php8.1-fpm.sock
sudo chmod 660 /run/php/php8.1-fpm.sock
- Перезапустите Nginx:
sudo nginx -t && sudo systemctl reload nginx
504 Gateway Time-out
Что значит: Nginx ждал ответа от бэкенда слишком долго и прервал соединение.
Самые частые причины:
- Долгая обработка PHP-скрипта
- Медленная база данных
- Большая загрузка сервера
Как исправить:
- Увеличьте таймауты в конфиге сайта (в блоке server или location):
proxy_connect_timeout 300s;
proxy_send_timeout 300s;
proxy_read_timeout 300s;
fastcgi_read_timeout 300s; # для PHP
- Оптимизируйте 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
- Перезапустите сервисы:
sudo systemctl restart php-fpm
sudo systemctl reload nginx
- Если проблема в конкретном скрипте — оптимизируйте запросы к БД или кэшируйте тяжёлые страницы.
413 Request Entity Too Large
Что значит: Клиент пытается загрузить файл больше лимита, установленного в Nginx. По умолчанию — 1 МБ.
Причины: загрузка больших файлов (фото, видео, бэкапы, архивы).
Как исправить:
- В конфиге сайта (или в
/etc/nginx/nginx.confв блоке http) увеличьте лимит:
client_max_body_size 64M; # или 128M, 512M, 1G и т.д.
- Перезапустите Nginx:
sudo nginx -t && sudo systemctl reload nginx
- Для 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
Помощь
Если у вас возникли вопросы или требуется помощь, пожалуйста, свяжитесь с нами через систему тикетов — мы обязательно вам поможем!