【问题标题】:Unable to load media files in nginx无法在 nginx 中加载媒体文件
【发布时间】:2018-12-23 05:19:30
【问题描述】:

我刚刚在 digitalocean 上部署了一个 django 应用程序,我遇到了 nginx 问题,因为它不提供用户上传的媒体文件。

这是我的 nginx 配置:

upstream app_server {
        server unix:/home/sayc/run/gunicorn.sock fail_timeout=0;
}

server {
        listen 80;
        server_name www.shelteratyourcrossroads.com;

        keepalive_timeout 5;
        client_max_body_size 4G;

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

        location /static/ {
                alias /home/sayc/staticfiles/;
        }

        # checks for static file, if not found proxy to app
        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;
        }
}

下面是settings.py中的一些设置:

...
# Static
STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(os.path.dirname(BASE_DIR), 'staticfiles')
STATICFILES_DIRS = [
    os.path.join(BASE_DIR, 'static'),
]

# Media
MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media/')

# CKEditor Configuration
CKEDITOR_JQUERY_URL = 'https://ajax.googleapis.com/ajax/libs/jquery/2.2.4/jquery.min.js'
CKEDITOR_UPLOAD_PATH = 'uploads/'
CKEDITOR_IMAGE_BACKEND = 'pillow'
CKEDITOR_CONFIGS = {
    'default' : {
        'toolbar' : None,
    }
}
...

models.py:

class Post(models.Model):
    ...
    image = models.ImageField(upload_to='posts/%Y/%m/%d', blank=True)
    ...

class Profile(models.Model):
    ...
    image = models.ImageField(upload_to='users/%Y/%m/%d', null=True, blank=True)
    ...

上面models.py文件中每个类中的图像字段意味着我的媒体目录中有两个子文件夹-media/postsmedia/users。此外,还有另一个子文件夹 media/uploads - 这是由 CKEDITOR_UPLOAD_PATH 设置添加的。这使得三个。

我希望这足以帮助调试我的 nginx 配置有什么问题。

【问题讨论】:

    标签: python django python-3.x nginx digital-ocean


    【解决方案1】:

    你需要添加

    location /media/ {
        alias /home/sayc/<project_name>/media/;  # change project_name
    }
    

    在你的 Nginx 配置中。

    自从

    STATIC_ROOT = os.path.join(os.path.dirname(BASE_DIR), 'staticfiles')
    

    我猜不出你的媒体文件的完整路径:

    MEDIA_ROOT = os.path.join(BASE_DIR, 'media/')
    

    【讨论】:

    • 我收到错误:nginx: [emerg] location "/" is outside location "/media/" in /etc/nginx/sites-enabled/sayc:23
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-04-14
    • 1970-01-01
    • 2011-08-06
    • 2019-02-25
    • 2016-02-09
    • 1970-01-01
    • 2019-02-08
    相关资源
    最近更新 更多