首页 > 解决方案 > Django Nginx Gunicorn - 媒体文件未显示(DigitalOcean 部署)

问题描述

我已经使用 Nginx 和 Gunicorn 在 Ubuntu 16.04 上部署了一个 Django 项目。我得到了一切,包括静态文件,但我的媒体文件无法正常提供。

设置.py

MEDIA_URL = '/media/'

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

模型.py

resume_upload = models.FileField(blank=False, upload_to='resumes', null=True, validators=[FileExtensionValidator(allowed_extensions=['pdf']), validate_file_size])

我在 /etc/nginx/sites-available/ 中列出的是

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

location = /favicon.ico { access_log off; log_not_found off; }
location /static/ {
    root /home/syed/btawebsite;
}

location = /media/ {
    root /home/syed/btawebsite;
}

location / {
    include proxy_params;
    proxy_pass http://unix:/home/syed/myproject.sock;
}

}

我想进入管理员,点击上传的文件,并能够在浏览器中查看文件。有人对我如何实现这一目标有任何想法吗?我已经通过使用终端并查看文件实际上添加到 ~btawebsite/media/resumes 的目录进行了验证,但是当我单击管理 url 时我无法查看它们。

当我点击该网址时,我收到一个错误:

未找到 在此服务器上未找到请求的资源。

更新:

我已将 settings.py 更改为

STATIC_URL = '/static/'

STATICFILES_DIRS = (
    os.path.join(BASE_DIR, 'static/'),
)

STATIC_ROOT = os.path.join(BASE_DIR, 'static/')

MEDIA_URL = '/media/'

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

和 nginx 设置为

location /static/ {
    alias /home/syed/btawebsite/static/;
}

location = /media/ {
    alias /home/syed/btawebsite/media/;
}

静态仍然有效,但是媒体却没有。

标签: djangonginxmediagunicorn

解决方案


对于 nginx 配置,位置后的“=”符号表示这是精确的位置匹配。因此,将您的设置更改为

location /media/ {
    root /home/syed/btawebsite;
}

和同样的/static/。这对于网站图标是正确的。有关 nginx 位置指令的更多信息,请查看.


推荐阅读