Конфигурация X-Accel-Redirect Nginx не работает - PullRequest
1 голос
/ 12 апреля 2020

Я сейчас развертываю 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 остальные рамки.

...