如何使用Nginx和django提供媒体文件?

时间:2018-05-28 21:17:08

标签: django nginx configuration gunicorn

晚上好,

我目前正面临家庭项目的问题。

我用gunicorn和nginx建立了一个django项目。

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;
    }

以下是我的settings.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 / users / project / test / media / media /sized/products/picture.JPG”失败(2:没有这样的文件或目录),客户端:some_client_ip,server:my_server_ip,request:“GET /media/sized/products/picture.JPG HTTP / 1.1”,host:“my_website_ip”,referrer:“{{ 3}}“

你知道它可能来自哪里吗? (我很确定这是愚蠢的事情= /)

1 个答案:

答案 0 :(得分:1)

您忘了在Nginx配置文件中指定媒体部分,您也应该对静态文件执行相同操作

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