J'essaie de servir des fichiers multimédias protégés avec Nginx sendfile et X-Accel-Redirect en utilisant Django 2.0. Voici ma configuration Nginx:
server {
listen 8000;
server_name localhost;
charset utf-8;
sendfile on;
# Protected media
location /protected {
internal;
alias /Users/username/Documents/sat23/venv/media/;
}
# Django static
location /static {
alias /Users/username/Documents/sat23/venv/static/;
}
# All other requests.
location / {
uwsgi_pass django;
include /Users/username/Documents/sat23/venv/uwsgi_params;
}
}
Ensuite, dans mon urls.py, j'ai ajouté une vue simple qui devrait servir mes fichiers multimédias (je configurerai les autorisations plus tard):
def serveMedia(request):
url = request.path.replace('media', 'protected')
response = HttpResponse('')
response['X-Accel-Redirect'] = url
response['Content-Type'] = ''
return response
urlpatterns += [
path('/media/', serveMedia, name='protected_media')
]
Cependant, chaque fois que j'appelle localhost:8000/media/users/user35.jpg
, j'obtiens juste une page Django (pas nginx) 404, disant que Django a essayé tous les chemins configurés et qu'il n'a pas pu trouver celui demandé.
Donc, je soupçonnais que mon point de vue ne fonctionnait tout simplement pas. Je l'ai ensuite réécrit comme ceci:
def serveMedia(request):
return HttpResponse(content=b'Hello there')
Et bien sûr, il n'est pas appelé. Mais je ne sais pas pourquoi. Est-ce que quelqu'un peut m'aider?
PS Toutes les recommandations sur la configuration de nginx conf sont également les bienvenues!
Il n'y a pas de groupe de capture dans votre path
appel Django là-bas, donc cela ne correspondra que /media/
textuellement.
Vous voudrez peut-être utiliser la url
route à l'ancienne avec une expression rationnelle comme
urlpatterns += [
url(r'/media/.+', serveMedia),
]
pour capturer tout ce qui commence par /media/
Cet article est collecté sur Internet, veuillez indiquer la source lors de la réimpression.
En cas d'infraction, veuillez [email protected] Supprimer.
laisse moi dire quelques mots