Re[3]: Продажа контента

Igor Sysoev is at rambler-co.ru
Sat Apr 29 00:17:58 MSD 2006


On Sat, 29 Apr 2006, Дугин Сергей wrote:

>>>>> Появилась задача сделать сервис с платными подписками на доступ к
>>>>> контенту. Раньше делал просто апач+http auth и все было красиво... но
>>>>> теперь захотелось цивилизованно подойти к процессу с сделать нормальную
>>>>> форму с логином и паролем... вот только не знаю, как красивее
>>>>> организовать отдачу контента (файлы по 3-180Мб) клиентам из
>>>>> members-зоны... хояется сохранить возможность докачки и всякие там
>>>>> прелести типа ranges для многопоточного скачивания.... делать
>>>>> предполагается, как вы, наверное, уже догадались на apache+nginx...
>>>>> хотя, может быть, апач и не понадобится... но вопрос, пока, в следующем:
>>>>> подскажите правильный путь к организации раздачи контента только тем,
>>>>> кто заплатил/авторизовался.
>>>
>>>> По клику на ссылке download вызывается скрипт. Он, на основании любых
>>>> возможных критериев, определеяет имеет-ли этот юзер право на скачивание
>>>> данного файла. Если имеет - скрипт выдает X-Accell-Redirect с
>>>> перенаправлением на internal location на фронтенде (nginx). Дальше файл
>>>>  качается клиентом средствами nginx (с докачкой и т.д.).
>>>
>>> А можно маленький примерчик как перл выдает X-Accell-Redirect с
>>> перенаправлением на internal location ?
>>> И это обязательно на fast_cgi или можно и просто перл?
>
>> Есть конфигурация
>
>>      location  / {
>>          proxy_pass ...
>>          или
>>          fastcgi_pass ...
>>      }
>
>>      location  /download/ {
>>          internal;
>>          root   ...
>>      }
>
>> Запрос уходит на бэкенд, бэкенд возвращает среди прочего заголовок
>> "X-Accel-Redirect: /download/file". После этого запрос обслуживается в
>
>>      location  /download/ {
>>          ...
>>      }
>
>> Из ответа бэкенда при этом наследуются заголовки:
>
>> Set-Cookie
>> Content-Disposition
>> Cache-Control
>> Expires
>> Accept-Ranges
>
> Ну так ведь все эти заголовки юзер сможет увидить при скачивании через
> тот же reget и потом раздать на весь инет его и все кт осмогут сделать
> такой же заголовок смогут скачивать то за что было заплачен ов
> единичном экземпляре.
>
> Как в
>>      location  /download/ {
>>          ...
>>      }
> делать ограничение по IP на лету не перегружая каждый раз конфиг nginx
> и как можно считать сколько юзер скачал чтобы теоретически понять
> скачал он все или нет?

Это не задача nginx'а. Задача nginx'а - получить от бэкенда URI и отдать
его клиенту. Проверка IP, кук, времени скачивания и прочая - это задача
бэкенда. Нравится бэкенду запрос - он отдаёт редирект, не нравится - 403
или ещё чего. nginx лишь гарантирует, что, даже зная точное имя
/download/uri, в обход бэкенда файл не скачают.


Игорь Сысоев
http://sysoev.ru





More information about the nginx-ru mailing list