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

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

⚠️ Важная информация Все материалы, инструкции, команды и скрипты предоставлены исключительно в ознакомительных целях. Их применение может повлиять на работу операционной системы, баз данных и сетевого оборудования. Перед выполнением действий обязательно создайте резервную копию. При отсутствии необходимой квалификации обратитесь к ИТ-специалистам.
Nginx Error 404: Not Found (open() "/var/www/html/file" failed: No such file or directory) Linux / DevOps

Nginx Error 404: open() failed (No such file or directory) — Решение

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

Клиент запрашивает статический ресурс или роут одностраничного приложения (SPA), но получает ответ 404 Not Found. В журнале ошибок error.log регистрируется: open() "/var/www/html/static/app.js" failed (2: No such file or directory), client: ..., request: "GET /static/app.js HTTP/1.1".

Конфигурация NginxЗапрашиваемый URIРезультирующий путь на диске
root /var/www/html; в location /static//static/app.js/var/www/html/static/app.js (путь конкатенируется)
alias /var/www/static/; в location /static//static/app.js/var/www/static/app.js (префикс заменяется)
SPA без try_files/dashboard/usersNginx ищет физическую папку /dashboard/users
  • Файл отсутствует на диске или путь к нему сформирован веб-сервером неверно из-за путаницы root и alias.
  • При перезагрузке страницы в React/Vue/Angular приложении отдается 404 ошибка.
  1. Сопоставьте путь из лога ошибки с реальным расположением файлов на сервере:
    # Посмотрите путь, на который ругается Nginx в error.log, и проверьте диск:
    ls -la /var/www/html/static/app.js
  2. Поймите фундаментальную разницу между root и alias:
    • При root /data; путь вычисляется как root + location + URI.
    • При alias /data/; часть URI, совпавшая с location, полностью заменяется на путь alias.
    # ПРАВИЛЬНОЕ ИСПОЛЬЗОВАНИЕ ALIAS:
    location /static/ {
        alias /var/www/assets/; # Обязателен закрывающий слэш на конце!
    }
  3. Для одностраничных приложений (SPA) настройте перенаправление всех роутов на index.html через директиву try_files:
    location / {
        root /var/www/my-spa-build;
        index index.html;
        try_files $uri $uri/ /index.html;
    }
  4. Проверьте регистр символов в именах файлов: Linux чувствителен к регистру (File.jpg != file.jpg).
  5. Проверьте конфигурацию: sudo nginx -t && sudo systemctl reload nginx.
Ловушка с Alias: При использовании директивы alias внутри location с регулярными выражениями или без закрывающего слэша возникает трудноуловимый баг дублирования путей. Всегда проверяйте финальный путь в /var/log/nginx/error.log.
Практический опыт инженера: Не используйте `if (!-e $request_filename)` для проверки наличия файлов. Директива `try_files` работает на порядки быстрее и не создает сайд-эффектов модуля Rewrite («If is Evil»).

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

Почему при обновлении страницы в React/Vue выдается 404?

Потому что роутинг SPA происходит на клиенте через JS History API. Когда браузер напрямую запрашивает URL /profile, Nginx пытается найти файл /profile на диске. Директива try_files $uri $uri/ /index.html решает эту проблему.

Что означает директива try_files $uri $uri/ =404?

Nginx сначала проверяет существование точного файла ($uri), затем директории с таким именем ($uri/), и если ничего не найдено, возвращает ошибку 404.

Как отключить логирование 404 ошибок для favicon.ico и robots.txt?

Добавьте: location = /favicon.ico { log_not_found off; access_log off; }.

В чем опасность бага Alias Traversal (Off-by-slash)?

Если указать 'location /files { alias /var/www/files/; }' (без слэша после files), запрос /files.. скомпрометирует родительскую директорию /var/www/.