Новый модуль nginx для авторизированного доступа к файлам большого объема

Николай Гречух
22 марта 2008
Николай Гречух,
системный администратор OWOX

Часто возникает задача обеспечения авторизованного доступа к скачиванию пользователями статических файлов. Например, платная загрузка mp3, фильмов, или скачивание дилерами прайс-листов с индивидуальными ценами. Естественно, отдавать большие файлы php неоправданно, с этой задачей гораздо лучше справляется nginx.

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

Для решения этой задачи я и разработал модуль access_key. Модуль блокирует доступ, если url документа не содержит корректного ключа. Ключ генерируется в php и представляет собой md5 или sha1 хэш сигнатуры клиента, состоящей из некоего секретного слова и любых доступных в nginx переменных — ip адреса клиента, пути к файлу, etc.

Пример конфигурации: location /download {
 accesskey on;

 accesskey_hashmethod md5;
 accesskey_arg «key»;
 accesskey_signature «mypass$remote_addr»;
}

Клиенту можно выдать ссылку вида http://example.com/download/file.zip?key=09093abeac094, которая будет доступена только с определенного адреса.

В текущей версии ключ может быть только GET параметром, возможность использования cookie планируется. При чем в случае применения с Suhosin украденный cookie будет бесполезен.

Пользуйтесь, как говорится, на здоровье, и не нагружайте по чем зря ваш php :)

Метки: nginx, php

Комментарии

Добавить комментарий