Как использовать Nginx X-Accel-Redirect для проксирования удаленных файлов в Ruby on Rails приложение?

Я хочу использовать прокси-сервер, чтобы иметь возможность собирать статистику по файлам и не предоставлять прямые URL-адреса пользователям.
И в дальнейшем иметь возможность перейти на другой сервис без изменения исходного URL адреса.

Сейчас я использую Cloudinary и путь к файлу выглядит так:
<%= cl_video_tag("dog") %>
=> https://res.cloudinary.com/demo/video/upload/dog.mp4
  • Вопрос задан
  • 4105 просмотров
Пригласить эксперта
Ответы на вопрос 1
ivankomolin
@ivankomolin
Рассмотрим на примере, без привязки к языку программирования:
Есть урл https://res.cloudinary.com/demo/video/upload/dog.mp4
Есть файл /var/www/files/dog.mp4
Есть nginx который обрабатывает запросы клиента
Есть некий бэкенд код

В nginx
1. Создать internal location в nginx, например:
location /video/ {
  internal;
  root   /var/www/files/;
}

Инструкция internal говорит о том, что этот локейшн будет обрабатывать только запросы с бэкенда.

В коде
1. Роутером отлавливаете запрос на урл https://res.cloudinary.com/demo/video/upload/dog.mp4
2. Обрабатываете(в вашем случае сохраняете статистику, решаете отдавать контент пользователю или нет)
3. Если файл нужно отдать, добавляете в заголовок
X-Accel-Redirect https://res.cloudinary.com/video/dog.mp4


После этого nginx отдает клиенту файл /var/www/files/dog.mp4
А если обратиться напрямую к урл вида https://res.cloudinary.com/video/dog.mp4, получим 403 ошибку.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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