Проблема: 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).