Задать вопрос

Как раздать статику и защитить от прямого скачивания файлы в Nginx и Node.js?

Добрый день, уважаемые специалисты!

Есть сайт с учебными курсами, работающий в связке Nginx и Node.js.
Nginx раздает статику из двух каталогов: public в котором лежат стили, скрипты и т.д. и каталог data, в котором лежат сами материалы уроков (видеолекции, слайды и т.д.) и которые должны быть доступны только после авторизации.

Возникло несколько проблем:

1. Если удалить из сервера Node.js строки
app.use(express.static(path.join(__dirname, 'public'))),
то есть удалить раздачу статики через Node.js, то запрос на файлы возвращается с ошибкой 404. Хотя, как я понимаю, они должны раздаваться Nginx и не зависить от ноды?

2. Каким образом настроить конфиг Nginx, чтобы закрыть файлы от прямого скачивания?

Пробовал в конфиге писать следующее,

location /files {
        internal;
        alias /data;
    }


Однако в этот случае ответ приходит либо 404, либо (canceled) и заголовком Provisional headers are shown.

Добавление
add_header 'Access-Control-Allow-Origin' "$http_origin"
тоже не помогает.

Заранее благодарен за помощь!

PS. Полный когфиг Nginx

server {
    server_name 127.0.0.1;
    root D:/Server/local/sites/local;

    location / {
        proxy_pass http://127.0.0.1:3000/;
        proxy_set_header   Host $host;
        proxy_set_header   X-Real-IP $remote_addr;
        proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
    }

    location = /favicon.ico {
        access_log     off;
        log_not_found  off;
    }

    location /public {
    	allow all;
    }


    location /files {
        internal;
        alias /data;
    }

    error_log D:/Server/nginx/logs/local_error.log;
    access_log D:/Server/nginx/logs/local_access.log;
}
  • Вопрос задан
  • 2805 просмотров
Подписаться 6 Оценить 2 комментария
Пригласить эксперта
Ответы на вопрос 1
@kostnikolas
Используй X-Accel-Redirect.
Описание:
www.opennet.ru/base/net/nginx_x_accel_redirect.txt.html
Если коротко, то запрос на скачивание файла nginx отправляет на Node.js, если скачивание пользователю разрешено, то нода отвечает с заголовком X-Accel-Redirect:'/static/file.jpg'. Иначе возвращаем 404.
Получив X-Accel-Redirect от Node.js , nginx начинает отдавать файл пользователю.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы