2012-12-11 45 views
2

我试图从nginx和django服务器保护用户文件。Django + nginx提供私人静态文件

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的看法:

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() 

如果我试图让,让我们说,本地主机/语音文件/获取/ 74 /响应,Nginx将重写它来查看(/audiofiles/serve/74 /),并且view会返回响应,但是它会在返回时拒绝,将尝试GET localhost:8000 /%full_file_path%。为什么? (文件存在..)

回答

0

通过配置底鞋:

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 /; 
    } 
} 

注重为私人文件的位置(在我的情况..)