Ви повинні використовувати sendfile apis, наданий популярними серверами, такими як apacheабо nginx
у виробництві. Багато років я використовував sendfile api цих серверів для захисту файлів. Потім створили простий додаток джанго на основі середнього програмного забезпечення, яке підходить як для розробки, так і для виробництва. Ви можете отримати доступ до вихідного коду тут .
ОНОВЛЕННЯ: у новій версії pythonпостачальник використовує django, FileResponseякщо є, а також додає підтримку для багатьох реалізацій сервера, починаючи від lighthttp, caddy до hiawatha
Використання
pip install django-fileprovider
- додайте
fileproviderдодаток до INSTALLED_APPSналаштувань,
- додати
fileprovider.middleware.FileProviderMiddlewareдо MIDDLEWARE_CLASSESналаштувань
- встановити
FILEPROVIDER_NAMEналаштування на виробництво nginxабо apacheу виробництві, за замовчуванням це призначене pythonдля розробки.
у переглядах класів або функцій встановіть X-Fileзначення заголовка відповіді на абсолютний шлях до файлу. Наприклад,
def hello(request):
// code to check or protect the file from unauthorized access
response = HttpResponse()
response['X-File'] = '/absolute/path/to/file'
return response
django-fileprovider передбачається таким чином, що ваш код потребуватиме лише мінімальних змін.
Конфігурація Nginx
Щоб захистити файл від прямого доступу, ви можете встановити конфігурацію як
location /files/ {
internal;
root /home/sideffect0/secret_files/;
}
Тут nginxвстановлюється лише URL-адреса URL-адреси /files/доступу, якщо ви використовуєте конфігурацію вище, ви можете встановити X-файл як
response['X-File'] = '/files/filename.extension'
Роблячи це з конфігурацією nginx, файл буде захищений, а також ви можете керувати файлом від django views