Nginx Linux (Nginx)

Nginx — после смены прав каталога статические файлы получают 403

  • Обновлено
  • Чтение ≈ 3 минуты
  • Нужны права администратора

Краткий ответ

После chmod, chown, миграции или распаковки Nginx возвращает 403 на CSS, изображения или другие файлы, а динамические страницы доступны. Ошибка может быть не в самом файле, а в отсутствии права прохода по одному из его родительских каталогов или в правилах доступа.

В этой статье
  1. Симптом и границы применимости
  2. Возможные причины и как их отличить
  3. Пошаговая диагностика и исправление
  4. Как проверить результат
  5. Если проблема не устранена

#Симптом и границы применимости

После chmod, chown, миграции или распаковки Nginx возвращает 403 на CSS, изображения или другие файлы, а динамические страницы доступны. Ошибка может быть не в самом файле, а в отсутствии права прохода по одному из его родительских каталогов или в правилах доступа.

#Возможные причины и как их отличить

Возможная причинаКак узнатьЧто делать
Нет права прохода по каталогуДля открытия файла процессу нужен доступ к каждому родительскому каталогу.В error_log permission denied; на одном уровне каталога нет xПроверить namei -l и владельцев
Право чтения у файла отсутствуетНельзя лечить массовым chmod 777.Ошибка касается конкретного файла и ls -l показывает отсутствие чтенияВернуть корректные права из известной рабочей версии
403 задан правилами location или системой MACДополнительные ограничения могут срабатывать независимо от UNIX-прав.Файл читается пользователем, но в error_log access forbidden либо AVCПроверить deny и контекст SELinux/AppArmor

#Пошаговая диагностика и исправление

  1. Зафиксируйте точный URL и кодОткройте средства разработчика браузера (обычно F12), вкладку «Сеть», обновите страницу и выберите CSS/изображение с кодом 403. Скопируйте путь URL без параметров авторизации; проверьте curl -I. Не меняйте права до определения локального пути файла.
    Linux · Терминал (Bash)Команда
    Клиентский терминал; путь замените действительным; запрос не меняет сайт.
    curl -I https://example.com/assets/site.css
  1. Выясните сопоставление URL и пути файлаНа сервере в nginx -T найдите server_name, root и location для /assets/. У alias иной способ формирования пути, чем у root. Если файл обрабатывается upstream, причина может находиться в приложении. Запишите фактический путь в файловой системе.
    Linux · Терминал (Bash)КомандаНужен sudo
    Команда чтения; полный вывод может быть конфиденциальным.
    sudo nginx -T 2>&1 | grep -nE "server_name|root |alias |location |deny |allow "
  1. Читайте журнал ровно в момент запросаВ первом SSH-окне откройте error_log соответствующего сайта, во втором повторите curl. Различайте (13: Permission denied), directory index forbidden и access forbidden by rule: последним двум изменение chmod может не помочь.
  2. Уточните действительный путь error_log; используется пример обычной установки
    Linux · Терминал (Bash)КомандаНужен sudo
    Уточните действительный путь error_log; используется пример обычной установки.
    sudo tail -n 60 /var/log/nginx/error.log
  1. Проверьте каждый участок путиПодставьте в namei фактический путь файла. На выводе отметьте владельца, группу и биты каждого каталога; узнайте пользователя worker Nginx и проверьте доступ только для него. Не выполняйте рекурсивное chown/chmod: оно может нарушить безопасность других сайтов.
    Linux · Терминал (Bash)Команда
    Только чтение, оба пути заменить фактическими.
    namei -l /var/www/example.com/public/assets/site.css; ls -l /var/www/example.com/public/assets/site.css
  1. Установите минимально необходимые разрешенияВерните права и владельцев из резервной копии или из правил деплоя для одного повреждённого объекта. Если каталог должен быть доступен группе, настройте точечную группу/ACL, а не открывайте файл всем на запись. На системах с SELinux просмотрите сообщения аудита и восстановите утверждённый контекст без отключения защиты.
  1. Проверьте настройки веб-сервераЕсли причиной стал deny или location, поправьте только правило для выбранного каталога, предварительно сохранив исходный фрагмент. Выполните тест синтаксиса, затем перечитайте настройки; при ошибке теста остановитесь и верните копию.
  2. Дополнительная команда по теме
    Linux · Терминал (Bash)С осторожностьюНужен sudo
    Перечитывание нужно только при изменении конфигурации; изменение прав файла действует сразу.
    sudo nginx -t && sudo systemctl reload nginx

    Команда может изменить состояние системы или её настройки. Проверьте параметры и последствия перед запуском.

#Как проверить результат

Обновите страницу с отключённым кэшем. Убедитесь, что прежний URL возвращает 200 и правильный Content-Type; проверьте, что закрытые каталоги и конфигурационные файлы не стали общедоступны.

#Если проблема не устранена

Если 403 остался при правильных правах, исследуйте alias, index, правила deny, MAC-контексты и промежуточный прокси. Не расширяйте права всего /var/www ради одного файла.

Так эту ошибку тоже называют

Источники и обновления

Последнее обновление статьи: 2 ноября 2026. Версии программ и интерфейсы меняются — если шаги не совпадают с вашей версией, сверяйтесь с документацией производителя.