Как обслуживать медиафайлы с помощью Nginx и Django? - PullRequest
0 голосов
/ 29 мая 2018

Добрый вечер,

В настоящее время у меня возникла проблема с моим домашним проектом.

Я настроил проект django с gunicorn и nginx.

Кажется, Nginxобслуживать мою статику нормально, но когда дело доходит до медиафайлов, это не работает, и в моем журнале ошибок отображается следующее сообщение: failed (2: No such file or directory)

Я пытался использовать разных пользователей для nginx.conf, но это все ещето же самое.

Я что-то упустил, но не могу найти.

Я прикрепляю свой файл nginx (обновлено):

upstream app_server {
    server unix:/home/project/saleor.sock fail_timeout=0;
}

server {
    listen 80;

    server_name my_server_ip;

    access_log /home/project/logs/nginx-access.log;
    error_log /home/project/logs/nginx-error.log;

    location /media  {
      root    /home/user/project/test/media/;
      expires 1d;
    }

    location /static {
      root /home/user/project/test/static/;
      expires 1d;
      autoindex on;
    }


    location / {
        try_files $uri @proxy_to_app;
    }

    location @proxy_to_app {
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_set_header Host $http_host;
      proxy_redirect off;
      proxy_pass http://app_server;
    }
}

ОБНОВЛЕНИЕ: Я удалил следующую часть:

location ~ ^/(images|javascript|js|css|flash|media|static)/  {
  root   /home/user/project/test;
  expires 30d;
}

и добавил:

    location /media {
      root /home/user/project/test/media/;
      expires 1d;
      autoindex on;
    }

    location /static {
      root /home/user/project/test/static/;
      expires 1d;
      autoindex on;
    }

Вот пример моих настроек.py:

ALLOWED_HOST = my_server_ip
PROJECT_ROOT = os.path.normpath(os.path.join(os.path.dirname(__file__), '..'))
MEDIA_ROOT = os.path.join(PROJECT_ROOT, 'media')
MEDIA_URL = '/media/'

ОБНОВЛЕНИЕ:

Вот пример моего журнала ошибок nginx:

[ошибка] 11475 # 11475: * 1 open () "/ home / user / project / test/media/media/sized/products/picture.JPG "не удалось (2: такой файл или каталог отсутствуют), клиент: some_client_ip, сервер: my_server_ip, запрос:" GET / media / sized / products / picture.JPG HTTP / 1.1 ", хост:" my_website_ip ", реферер:" http://my_website_ip/en/"

У вас есть идеи, откуда это может быть?(Я совершенно уверен, что это что-то глупое = /)

1 Ответ

0 голосов
/ 29 мая 2018

Вы забыли указать медиа часть в файле conf Nginx, также вы должны сделать то же самое для статических файлов

server {
        ....
        # There is for media, Put your path here :)
        location /media {
            autoindex on;
            alias /home/myusername/myproject/media/;
        }
        ....
    }
...