Nginx: проверка конфигурации и безопасная перезагрузка
Правильная последовательность: nginx -t → systemctl reload. Скрипт проверки, обработка ошибок, zero-downtime.
Как использовать
- Всегда проверяйте конфигурацию: `nginx -t` перед reload
- Используйте `reload` вместо `restart` — не прерывает соединения
- Автоматизируйте проверку через скрипт или CI/CD
Правильная последовательность проверки конфигурации Nginx перед перезагрузкой. Никогда не делайте reload без проверки — это может привести к остановке сервера.
Базовая проверка
# Проверка синтаксиса конфигурации
sudo nginx -t
# Если проверка прошла успешно, перезагрузите конфигурацию
sudo systemctl reload nginx
Безопасная перезагрузка с проверкой
#!/bin/bash
# /usr/local/bin/nginx-safe-reload
set -e
echo "🔍 Проверка конфигурации Nginx..."
if sudo nginx -t 2>&1; then
echo "✅ Конфигурация корректна, перезагружаю nginx..."
sudo systemctl reload nginx
# Проверка статуса
sleep 1
if sudo systemctl is-active --quiet nginx; then
echo "✅ Nginx перезагружен успешно"
exit 0
else
echo "❌ Nginx не запустился после reload!"
exit 1
fi
else
echo "❌ Ошибка в конфигурации! Nginx не перезагружен."
exit 1
fi
Использование:
chmod +x /usr/local/bin/nginx-safe-reload
sudo nginx-safe-reload
Проверка с подробным выводом
# Подробный вывод ошибок (stderr → stdout)
sudo nginx -t 2>&1
# Сохранение вывода в файл для анализа
sudo nginx -t > /tmp/nginx-test.log 2>&1
cat /tmp/nginx-test.log
# Проверка конкретного файла конфигурации
sudo nginx -t -c /etc/nginx/nginx.conf
Альтернативные команды перезагрузки
# Через systemctl (рекомендуется)
sudo systemctl reload nginx
# Через nginx напрямую (если systemctl недоступен)
sudo nginx -s reload
# Полный перезапуск (используйте только при необходимости)
sudo systemctl restart nginx
# Плавная перезагрузка (old nginx finishes connections)
sudo nginx -s quit
sudo systemctl start nginx
Проверка статуса после перезагрузки
# Проверка статуса сервиса
sudo systemctl status nginx
# Проверка, что nginx слушает порты
sudo ss -tlnp | grep nginx
# или
sudo netstat -tlnp | grep nginx
# Проверка активных соединений
sudo nginx -T | grep -A 5 "stub_status" # если включён статус-модуль
curl http://localhost/nginx_status
Автоматизация в CI/CD
# .github/workflows/nginx-test.yml
name: Nginx Config Test
on: [push, pull_request]
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Test nginx configuration
run: |
docker run --rm -v $(pwd):/etc/nginx/conf.d nginx nginx -t
Типичные ошибки
- ❌ Reload без проверки —
systemctl reload nginxбезnginx -t - ❌ Restart вместо reload — прерывает активные соединения
- ❌ Игнорирование ошибок — «и так работает»
- ❌ Нет бэкапа конфига — перед изменениями не сохраняют старую версию
Best practices
- ✅ Всегда делайте
nginx -tперед reload - ✅ Используйте
reloadвместоrestartдля zero-downtime - ✅ Сохраняйте бэкапы конфигов перед изменениями
- ✅ Автоматизируйте проверку в CI/CD пайплайне
- ✅ Мониторьте статус после перезагрузки
Где применять
- Production: только
nginx-safe-reloadскрипт - Staging: можно
nginx -t && systemctl reload - Dev:
nginx -s reloadдля быстрой перезагрузки - CI/CD: автоматическая проверка в пайплайне
Связанные сниппеты:
Документация: