Toke.de

Schützen von Downloads mit Django und Nginx

Da ich heute gefragt wurde wie bei einem Apache (für dynamische Daten) mit Ngnix (als Frontendproxy und statische Daten) einzelne Downloads oder Dateizugriffe mit Django kontrolliert werden können beschreibe ich hier eine Möglichkeit.

Nginx konfigurieren

Der Nginx soll die Daten nur auf "Zuruf" senden. Somit muss er daran erinnert werden, das er die Daten nicht bei einem einfachen GET zurückliefert. Das macht "internal".

location /protected-downloads/ {
alias /var/protected/;
internal;
}

Nginx Konfiguration

Der Django-View

Unser View soll dem Nginx, der ja als Proxy zwischen dem Apachen und dem Browser sitzt ein Zeichen geben eine bestimmte Datei auszuliefern. Nginx verwendet dazu den Header: X-Accel-Redirect. Es reicht diesen mit einem Pfad zu senden um den Sendevorgang anzustoßen.

@login_required
def download(request, file=None):
response = HttpResponse()
response['Content-Type'] = 'application/octet-stream'
response['X-Accel-Redirect'] = '/protected-downloads/' + file
return response

Django View zum triggern des Downloades

Veröffentlicht von am

Tags:
Flattr this