[英]Django+nginx serving private static files
I'm trying to server protected user-files from nginx and django. 我正在尝试从nginx和django服务器保护受保护的用户文件。
nginx.conf: nginx.conf:
server {
listen 80;
gzip off;
expires off;
location /static/ {
add_header X-Static hit;
autoindex on;
expires off;
root /Users/andrewshkovskii/workspace/ip_pbx/;
}
location / {
proxy_pass http://localhost:8000;
rewrite ^/audiofiles/get/(\d+)/ /audiofiles/serve/$1/ last;
}
location /media/audio {
internal;
root /var/ip_pbx/users;
}
}
Django view: Django视图:
def get(self, request, *args, **kwargs):
audio_file = self.get_object()
ogg_file_version = audio_file.audiofileversion_set.filter(format="ogg")
if ogg_file_version.exists():
ogg_file_version = ogg_file_version[0]
res = HttpResponse()
res["Content-type"] = "audio/ogg"
res["X-Accel-Redirect"] = ogg_file_version.file.path
res["Content-length"] = ogg_file_version.file.size
return res
return Http404()
If I trying to GET , let's say, localhost/audiofiles/get/74/ , nginx will rewrite it to view (/audiofiles/serve/74/), and view will return response, but it respose, when returned, will trying to GET localhost:8000/%full_file_path% .. Why? 如果我尝试GET,例如localhost / audiofiles / get / 74 /,nginx会将其重写为view(/ audiofiles / serve / 74 /),并且view将返回响应,但是当返回时,它会重新放置以尝试GET localhost:8000 /%full_file_path%..为什么? (file exists..) (文件已存在..)
soled by config : 由config整理:
server {
listen 80;
gzip off;
expires off;
error_log /usr/local/Cellar/nginx/1.2.5/logs/error.log debug;
location /static/ {
add_header X-Static hit;
autoindex on;
expires off;
root /Users/andrewshkovskii/workspace/ip_pbx/;
}
location / {
proxy_pass http://localhost:8000;
rewrite ^/audiofiles/get/(\d+)/ /audiofiles/serve/$1/ last;
}
location ~ /var/ip_pbx/users_andrewshkovskii/(\d+)/(audio|calls)/(.*) {
internal;
root /;
}
}
Note the re for location of private files (in my case.. ) 注意私有文件的位置(以我为例)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.