Центр Диагностики & База Системных Ошибок

Решения для Windows Server, Active Directory, 1С, СУБД, Linux, Cisco, MikroTik и IP-телефонии.

⚠️ Важная информация Все материалы, инструкции, команды и скрипты предоставлены исключительно в ознакомительных целях. Их применение может повлиять на работу операционной системы, баз данных и сетевого оборудования. Перед выполнением действий обязательно создайте резервную копию. При отсутствии необходимой квалификации обратитесь к ИТ-специалистам.
Nginx Error 500: Internal Server Error (open() "/var/www/html/index.php" failed: Permission denied) Linux / DevOps

Nginx Error 500: open() failed (13: Permission denied) — Решение

Обновлено: 18.08.2026  ·  Официальная база знаний

Веб-сервер возвращает код 500 Internal Server Error при обращении к статическим файлам или скриптам. В файле /var/log/nginx/error.log фиксируется отказ системного вызова open(): open() "/var/www/html/index.php" failed (13: Permission denied), client: ..., server: ..., request: "GET / HTTP/1.1".

Компонент проверкиТекущее состояниеТребуемое значение
Владелец процесса workernginx или www-dataДолжен иметь права на чтение файлов и исполнение (траверс) каталогов
Права на директорииdrwx------ (700)drwxr-xr-x (755) по всей иерархии пути от корня /
Права на файлы-rw------- (600)-rw-r--r-- (644)
SELinux Contextunlabeled_t / default_thttpd_sys_content_t
  • Пользователь получает 500 ошибку, если Nginx работает как standalone HTTP-сервер, или 403 Forbidden, если блокируется чтение директории.
  • Прямой доступ от пользователя root работает, но под пользователем веб-сервера доступ заблокирован.
  1. Определите системного пользователя, под которым запущены рабочие процессы Nginx:
    ps aux | grep "nginx: worker process" | awk '{print $1}' | head -n 1
  2. Установите корректного владельца и группу для каталога с сайтом (например, www-data):
    sudo chown -R www-data:www-data /var/www/html
  3. Выставьте стандартные безопасные права: 755 для директорий и 644 для файлов:
    sudo find /var/www/html -type d -exec chmod 755 {} \;
    sudo find /var/www/html -type f -exec chmod 644 {} \;
  4. Убедитесь, что пользователь Nginx имеет флаг исполнения (+x) на все родительские каталоги пути:
    namei -l /var/www/html/index.php
  5. Если на сервере включен SELinux (CentOS, RHEL, AlmaLinux, Rocky), восстановите контексты безопасности веб-сервера:
    sudo getenforce
    sudo semanage fcontext -a -t httpd_sys_content_t "/var/www/html(/.*)?"
    sudo restorecon -Rv /var/www/html
  6. Перезапустите Nginx: sudo systemctl restart nginx.
Критично для безопасности: Никогда не используйте команду chmod -R 777. Это открывает вектор для локальной эскалации привилегий и модификации исходного кода злоумышленниками через веб-шеллы.
Практический опыт инженера: Частая ловушка: размещение сайта в каталоге `/home/user/site`. Домашняя папка пользователя `/home/user` по умолчанию имеет права `0700` или `0750`, что наглухо блокирует worker-процесс `www-data` на самом верхнем уровне.

Частые вопросы (FAQ)

Почему Nginx отдает 500, а не 403 Forbidden при ошибке прав?

Если Nginx пытается открыть файл для внутренней передачи или выполнения через суб-модули и получает отказ ядра EACCES (13: Permission denied), обработчик запроса считает это системным сбоем ввода-вывода и генерирует статус 500.

Зачем нужны права на выполнение (+x) для директорий?

В Linux бит исполнения (+x) на директории дает пользователю право войти в нее (traverse). Без этого бита чтение файлов внутри директории невозможно даже при полных правах на сам файл.

Что делает утилита namei -l?

Утилита namei выполняет пошаговую проверку прав доступа и владельцев каждого сегмента пути от корня / до конечного файла, мгновенно выявляя каталог с блокирующими правами.

Как настроить права, если над файлами работают несколько разработчиков по SFTP?

Используйте установку SGID бита на директории (chmod g+s) и настройте POSIX ACL: setfacl -R -d -m u:www-data:rx,u:developer:rwx /var/www/html.