User Tools

Site Tools


ru:feature_autoimport

Автоимпорт

Схема работы следующая:

  • в цдн приходит запрос на файл cdn.domain.com/path/to/file.mp4
  • если файл есть в цдне , то просто отдаётся клиенту
  • если файла в цдне нет , то клиент редиректится на специальный урл (url4fail) , который обычно указывает на хранилище файлов storage.domain.com/path/to/file.mp4 . Запрашиваемый файл записывается в очередь на добавление и через некоторое время закачивается в цдн. После этого запросы на этот файл будут обслуживаться цдном.

Можно организовать редирект на защищённую ссылку на сторедж (см.ниже). Также можно изменять ссылку на которую редиректить (по-умолчанию к ссылке url4fail просто добавляется в конце имя файла в цдне) , если путь к файлу в цдне не соответствует пути к файлу на сторедже.

Если ожидается большое количество трафика, то при такой схеме лучше предварительно заимпортить самые популярные файлы , чтобы на сторедж не пошло сразу много трафика. Либо можно менять ссылки на файлы по частям , либо включить ненадолго трафик, чтобы набилась очередь на добавление и трафик снять. Подождать пока очередь закачается в цдн и потом снова давать трафик.

Редирект на защищённую ссылку на сторедж

Для включения защищённой ссылки в нгинксе нужен будет модуль http://nginx.org/en/docs/http/ngx_http_secure_link_module.html . Пример конфигурации вхоста для включения защищённой ссылки :

server {
  listen 192.168.0.1:80 ;
  server_name storage4cdn.example.com;
  error_log  /dev/null;
  access_log off;
  location ~ /\.ht { deny all; }
  
  location /s/ {
    secure_link $arg_md5,$arg_time;
    secure_link_md5 "SECRET_SALT$uri$secure_link_expires$remote_addr";

    if ($secure_link = "") {
        return 403;
    }

    if ($secure_link = "0") {
        return 410;
    }
    alias /home/user/example.com/contents/videos/;
  }
}

SECRET_SALT секретное слово, любой набор символов. Его нужно сообщить в поддержку цдна. При запросе файла , которого нет в цдне , пользователю будет выдан редирект на ссылку вида

http://storage4cdn.example.com/s/1000/1111/1111.mp4?md5=R-f0UltrpbTX9xVzS-3z4g&time=1489617943

Как проверить отдачу через защищённый виртхост

Генерируем ссылку для файла /1000/1111/1111.mp4 на домене storage4cdn.example.com

#!/bin/sh

DOMAIN='storage4cdn.example.com'
SECRET_SALT='some_salt'
EXPIRES=`date +%s`; EXPIRES=$(($EXPIRES+3600))  # время жизни ссылки
REMOTE_ADDR='1.2.3.4' # IP с которого будете проверять ссылку
FILE='/s/1000/1111/1111.mp4'
KEY=`echo -n "$SECRET_SALT$FILE$EXPIRES$REMOTE_ADDR" | openssl md5 -binary | openssl base64 | tr +/ -_ | tr -d =`
echo "$DOMAIN$FILE?md5=$KEY&time=$EXPIRES"
ru/feature_autoimport.txt · Last modified: 2017/09/25 12:48 by psv