Проблема: Nginx не применяет изменения после `nginx -s reload` или `systemctl reload nginx`. Конфигурация остается старой, или команда завершается ошибкой.
Причины:
1. Синтаксическая ошибка в конфиге – `nginx -t` не проходит.
2. Недостаточные права пользователя nginx на чтение файлов конфигурации или включенных (include) файлов.
3. Конфликт серверных блоков – дублирующиеся `server_name`, `listen` или upstream.
4. Отсутствие PID-файла – основной процесс nginx не в памяти (убит `kill -9` или упал).
5. Файловая система read-only (например, Docker контейнер) – reload не способен записать новый PID или прочитать конфиг.
6. Блокировка файла – каким-то процессом (tail, редактор, SELinux/AppArmor).
Решение:
1. Проверка синтаксиса
`nginx -t`
Если ошибка – исправить строку, указанную в выводе (например, `unknown directive "xyz"`).
2. Проверка прав
`ls -la /etc/nginx/` (должен быть `root:root`, права 644/755).
`sudo chown -R root:root /etc/nginx/ && sudo chmod -R 644 /etc/nginx/.conf`.
3. Принудительная перезагрузка
`sudo nginx -s reload`
Если не работает → `sudo systemctl restart nginx` (вызовет кратковременный downtime).
4. Поиск конфликтов
`nginx -T 2>&1 | grep -i "duplicate"` – покажет дубликаты.
5. Восстановление PID
`pidof nginx` – если пусто, запустить nginx: `sudo nginx`.
6. Контейнеры / read-only FS
`docker exec -it container_name nginx -s reload`
Если не помогает – `docker exec container_name kill -HUP 1` (PID 1 внутри контейнера).
7. Просмотр лога**
`tail -f /var/log/nginx/error.log` – сразу увидеть причину (emerg, alert).
Поддержите автора и задайте вопрос экспертам
Вступайте в нашу группу ВКонтакте, чтобы поддержать проект и получить консультацию экспертов по этой теме
Содержание темы
Ответы (0)
Пока нет ответов. Станьте первым, кто ответит!