Django + nginx servant des fichiers statiques privés

J’essaie de gérer les fichiers utilisateur protégés de nginx et django.

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

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

Si j’essaie de GET, disons localhost / audiofiles / get / 74 /, nginx le réécrira pour voir (/ audiofiles / serve / 74 /), et view retournera la réponse, mais quand il sera retourné, il essayera de GET localhost: 8000 /% full_file_path% .. Pourquoi? (le fichier existe..)

semé par 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 /; } } 

Notez le re pour l’emplacement des fichiers privés (dans mon cas ..)