Схема работы следующая:
Можно организовать редирект на защищённую ссылку на сторедж (см.ниже). Также можно изменять ссылку на которую редиректить (по-умолчанию к ссылке 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"