2017-08-24 5 views
1

Ich habe bisher versucht, die Mediendateien von Django zu schützen, ohne Glück! Ich versuche einfach nur dort zu arbeiten, wo nur Administratoren Zugriff auf den Medienordner haben. Hier ist meine Nginx-Datei.Django und Nginx X-accel-redirect

server { 
    listen 80; 
    server_name xxxxxxxxxx; 

    location = /favicon.ico {access_log off; log_not_found off;} 
    location /static/ { 
      alias /home/{site-name}/static_cdn/; 
    } 
    location /media/ { 
      internal; 
      root /home/{site-name}/; 
    } 

    location/{ 
this is setup and working. Didn't include Code though 

} 

Meine URL Datei

urlpatterns = [ 
    url(r'^media/', views.protectedMedia, name="protect_media"), 
] 

Und meine Ansicht

def protectedMedia(request): 

    if request.user.is_staff: 
     response = HttpResponse() 
     response['Content-Type'] = '' 
     response['X-Accel-Redirect'] = request.path 
     return response 

    else: 
     return HttpResponse(status=400) 

Dies ist ein 404 Not Found Nginx Fehler erzeugt. Sieht hier irgendetwas eklatant aus? Vielen Dank!

BTW, ich habe versucht,/media/an das Ende der Root-URL in den Nginx-Einstellungen hinzuzufügen.

+0

Ihre Konfiguration scheint das Problem zu sein, das in dieser Antwort identifiziert wird: https://stackoverflow.com/a/45774975/1081569. Sie können nicht dieselbe URL für die geschützte Ansicht verwenden wie in der nginx-Konfiguration. –

+0

Danke, @PauloAlmeida. Ich habe ein paar Änderungen an dem Link vorgenommen, den Sie mir geschickt haben, und es geschafft, dass es funktioniert! –

Antwort

1

Dies ist, was dieses Problem dank @Paulo Almeida behoben.

In der nginx Datei, die ich geändert, was previosly auch ich hatte ...

location /protectedMedia/ { 
      internal; 
      root /home/{site-name}/; 
    } 

Meine url ist ...

url(r'^media/', views.protectedMedia, name="protect_media"), 

und die Aussicht ist ...

def protectedMedia(request): 

    if request.user.is_staff: 
     response = HttpResponse(status=200) 
     response['Content-Type'] = '' 
     response['X-Accel-Redirect'] = '/protectedMedia/' + request.path 
     return response 

    else: 
     return HttpResponse(status=400) 

Das funktioniert perfekt! Jetzt können nur Administratoren auf die Mediendateien zugreifen, die in meinem Medienordner gespeichert sind.

Verwandte Themen