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

Каждому пользователю файл по уникальной ссылке[NGINX, PHP]

Приветствую, о джедаи.
Поставили задачу, решаю не первый день, но никак не совладать.

Задача:
Каждому пользователю отдается видеофайл уникальный для него, вида domen.tv/video/{hash}/file.mp4(flv)
hash состоит из ip пользователя и соли.
Надо, чтобы эта ссылка открывалась лишь у этого пользователя.
Структура хранения файлов такая(можно и поменять):

domen
— php скрипты
videofiles
— 1000
— — 24
— — — file.mp4

Config NGINX
server {
listen ip.ip.ip.ip;
root /var/www/domen;
index index.php index.html index.htm;
server_name domen.tv www.domen.tv;
client_max_body_size 2g;

location / {
try_files $uri /index.php;
}

location ~ \.php$ {
access_log /var/log/nginx/access_tv.log;
error_log /var/log/nginx/error_tv.log;

include fastcgi_params;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
}

location ~ \.mp4$ {
root /var/www/videofiles/;
rewrite ^/video/(.+)$ /$1 last;
access_log /var/log/nginx/access_tv_mp4.log;
error_log /var/log/nginx/error_tv_mp4.log;
mp4;
mp4_buffer_size 5m;
mp4_max_buffer_size 10m;
}

location ~ \.flv$ {
root /var/www/videofiles/;
rewrite ^/video/(.+)$ /$1 last;
access_log /var/log/nginx/access_tv_flv.log;
error_log /var/log/nginx/error_tv_flv.log;
flv;
}
}


Я различные ухищрения использовал, но они не прокатывали. Настройка NGINX для меня не совсем профильна, так что причина явно в моих руках.
Была найдена эта статья habrahabr.ru/post/151795, но что с конфигами nginx для стриминга будет?

Надеюсь всё нормально объяснил, спасибо за внимание.

Большое спасибо.
  • Вопрос задан
  • 4358 просмотров
Подписаться 18 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 3
ntkt
@ntkt
Потомственный рыцарь клавиатуры и паяльника
Есть вот такой модуль:
wiki.nginx.org/HttpSecureDownload

И еще вот такой:
wiki.nginx.org/HttpSecureLinkModule
Для использования второго потребуется написать некоторый код, который будет генерить токены (все это описано по ссылке).
Ответ написан
mpriver
@mpriver
Используйте заголовок X-Accel-Redirect.

Для этого location, в котором фактически располагаются файлы, помечаете как internal:
location /videofiles {
    root /var/www;
    internal;
}

Такой location будет доступен для пользователя только в случае внутренних редиректов nginx и при использование заголовка X-Accel-Redirect.

Для проверки есть ли у пользователя доступ к файлу используйте следующий скрипт:
<?php
    // Здесь проверяете, есть ли у пользователя доступ
    header("X-Accel-Redirect: /videofiles/" . $path);
?>

В этом случае будут доступны все возможности предоставляемые при прямом скачивании статического контента с сервера nginx (например, докачка).
Ответ написан
Комментировать
try4tune
@try4tune
Почему не сделать PHP-скрипт, который будет проверять нужные данные (IP и т.п.), и отдавать соответствующий файл через readfile(), к примеру?
Ответ написан
Ваш ответ на вопрос

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

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