Nginx alias: отдать файлы из другой папки

Категория: Nginx · Обновлено:

alias подменяет совпавшую часть URI на путь в файловой системе. В отличие от root, который добавляет URI к корню, alias позволяет отдать файлы из каталога, не совпадающего с именем location. Это удобно для статики, скачанных файлов и вложенных приложений.

Отдать каталог по другому URL

Текст
location /static/ {
    alias /var/www/app/assets/;
}

location /downloads/ {
    alias /srv/files/public/;
    autoindex off;
    add_header X-Content-Type-Options nosniff;
}

Запрос /static/app.css будет прочитан из /var/www/app/assets/app.css. Следите за завершающими слешами: если location и alias заканчиваются слешем, подстановка предсказуема. При несовпадении можно получить лишний слеш или путь вида /var/www/app/assetsapp.css, поэтому проверяйте реальные запросы через curl -I.

root в этой ситуации выглядел бы так: location /static/ { root /var/www/app; }, и Nginx искал бы файл в /var/www/app/static/app.css. Выбирайте root, когда структура каталогов совпадает с URL, и alias, когда это неудобно. Для нового проекта чаще проще root — меньше шансов ошибиться.

Не используйте alias с динамическим путём из пользовательского ввода и не выходите за пределы каталога через ... Nginx нормализует URI, но символические ссылки могут указывать наружу; для чувствительных файлов включите disable_symlinks on и проверьте права. autoindex on показывает список файлов — обычно его отключают.

Для SPA alias вместе с try_files требует аккуратности: путь может собраться из полного URI и привести к 404. Если нужен fallback, используйте root или отдельный location = /index.html. После изменения конфигурации выполните nginx -t и проверьте коды ответов и MIME-типы.

Документация: ngx_http_core_module: alias, root vs alias.