Сейчас я развертываю проекты django на CentOS, и у меня проблема с X-Accel-Redirect для защищенного обслуживания файлов.
Вот мой nginx.conf
server
{
listen 80;
server_name example;
index index.html index.htm index.php;
root /www/server/example;
charset UTF-8;
access_log /var/log/nginx/myproject_access.log;
error_log /var/log/nginx/myproject_error.log;
client_max_body_size 75M;
location /public/ {
root /www/wwwroot/myproject/;
}
location /media/ {
root /www/wwwroot/myproject/;
internal;
}
location / {
include uwsgi_params;
uwsgi_pass django;
}
...
}
Разумеется, защищенные файлы находятся на /www/wwwroot/myproject/media
.
И соответствующий файл представления python приведен ниже.
class ProtectedView(generics.GenericAPIView):
permission_classes = [IsAuthenticated]
def get(self, request, id, target):
file_name = "1.png"
response = HttpResponse()
response["X-Accel-Redirect"] = "/media/{0}".format(file_name)
response["Content-Disposition"] = "attachment; filename={0}".format(file_name)
return response
Но сервер возвращает ошибку 404.
И myproject_error.log такой.
[error] 24570#0: *5 open() "/www/server/example/media/1.png" failed (2: No such file or directory), client: 174.11.13.81, server: example, request: "GET /protected-view/ HTTP/1.1", upstream: "uwsgi://0.0.0.0:8008", host: "40.1.12.23"
Возможно, блок location /media/ {}
не работает. Какая проблема? Я изменил разрешение, но не работает. PS: я использую фреймворк django rest.
index.html
в/www/wwwroot/myproject/
и посмотреть, сработает ли это? :) - person glinda93   schedule 12.04.2020internal
. Но я использую ограничениеinternal
и вызываю его в представлении Python. Но не работает. - person devcrazy   schedule 12.04.2020location
, например, для сопоставления URI, оканчивающихся на.png
? - person Richard Smith   schedule 13.04.2020location
. то естьlocation ^~ /media/ { }
- person devcrazy   schedule 13.04.2020