프로덕션 과 같이 apache
또는 nginx
프로덕션 환경에서 널리 사용되는 서버에서 제공 한 sendfile api를 사용해야합니다 . 몇 년 동안 나는 파일을 보호하기 위해이 서버의 sendfile api를 사용했습니다. 그런 다음 개발 및 생산 목적 모두에 적합한이 용도로 간단한 미들웨어 기반 장고 앱을 만들었습니다 . 여기 에서 소스 코드에 액세스 할 수 있습니다 .
업데이트 : 새 버전의 python
공급자에서는 FileResponse
가능한 경우 django 를 사용하고 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 /files/
에만 액세스 하는 위치 URL을 설정합니다. 위의 구성을 사용하는 경우 X-File을 다음과 같이 설정할 수 있습니다.
response['X-File'] = '/files/filename.extension'
nginx 구성 으로이 작업을 수행하면 파일이 보호되고 django에서 파일을 제어 할 수 있습니다 views