Конфигурация X-Accel-Redirect Nginx не работает

Сейчас я развертываю проекты 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.


person devcrazy    schedule 12.04.2020    source источник
comment
Можете ли вы поместить index.html в /www/wwwroot/myproject/ и посмотреть, сработает ли это? :)   -  person glinda93    schedule 12.04.2020
comment
Конечно. Это работает, когда вы избавляетесь от internal. Но я использую ограничение internal и вызываю его в представлении Python. Но не работает.   -  person devcrazy    schedule 12.04.2020
comment
Есть ли у вас какие-либо другие блоки location, например, для сопоставления URI, оканчивающихся на .png?   -  person Richard Smith    schedule 13.04.2020
comment
Нет, другие блоки имеют конфигурацию по умолчанию. Но я нашел решение здесь . Я добавил ^~ к location. то есть location ^~ /media/ { }   -  person devcrazy    schedule 13.04.2020