Часто возникает задача обеспечения авторизованного доступа к скачиванию пользователями статических файлов. Например, платная загрузка 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 :)
