Ошибка 403 Forbidden в Nginx: настройка прав доступа chmod и владельцев chown
Симптомы ошибки 403 Forbidden в Nginx
Ошибка с кодом ответа 403 Forbidden указывает на то, что веб-сервер успешно принял запрос от клиента, понял его, но категорически отказывается отдавать страницу из-за ограничений безопасности или отсутствия прав на чтение.
- В браузере отображается стандартная системная страница:
403 Forbidden / nginx. - В системном журнале
/var/log/nginx/error.logрегистрируется запись:directory index of "/var/www/site/" is forbidden. - В логе ошибок появляется статус:
... open() "/var/www/site/index.html" failed (13: Permission denied).
Три основные причины и методы исправления ошибки 403
- Причина 1. Неправильный владелец файлов (chown):
Nginx и PHP-FPM в Ubuntu/Debian работают от имени системного пользователя
www-data. Если вы загрузили файлы под пользователемroot, веб-сервер не сможет их прочитать. Назначьте правильного владельца:sudo chown -R www-data:www-data /var/www/yoursite - Причина 2. Слишком строгие права доступа (chmod):
Веб-серверу требуется право на чтение файлов (
644) и право на вход в директории (755). Установите эталонные права:# Устанавливаем права 755 для всех папок: sudo find /var/www/yoursite -type d -exec chmod 755 {} \; # Устанавливаем права 644 для всех файлов: sudo find /var/www/yoursite -type f -exec chmod 644 {} \; - Причина 3. Отсутствие индексного файла в директиве Nginx:
Если в папке сайта нет файла
index.htmlилиindex.php, а листинг каталога отключен, Nginx вернет ошибку 403. Откройте конфигурацию виртуального хоста:sudo nano /etc/nginx/sites-available/yoursite.confУбедитесь, что внутри блока
serverприсутствует корректная строкаindex:server { listen 80; server_name example.com; root /var/www/yoursite; index index.php index.html index.htm; ... }Проверьте синтаксис и перезапустите Nginx:
sudo nginx -t && sudo systemctl reload nginx
Критическая ошибка новичков: Никогда не выставляйте права chmod -R 777! Это создает огромную дыру в безопасности, позволяя любому скрипту перезаписывать системные исполняемые файлы.
Частые вопросы (FAQ)
Почему права 755 нужны для папок, а не 644?
В Linux бит исполнения (+x) для каталогов означает право на вход внутрь папки и доступ к ее содержимому. Без него веб-сервер не сможет открыть файлы внутри каталога.
Что делать, если ошибка 403 возникает только при обращении к скрытым файлам?
В типовых конфигурациях Nginx доступ к скрытым файлам (например, .env или .git) специально заблокирован правилом location ~ /\. { deny all; } в целях безопасности.
Как включить отображение файлов в папке (Directory Listing) вместо ошибки 403?
Добавьте директиву autoindex on; внутри блока location в конфигурационном файле Nginx.
Как проверить, под каким пользователем запущен Nginx?
Выполните команду ps aux | grep nginx. Первая колонка покажет имя пользователя (обычно www-data или nginx).