Ви повинні використовувати 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