3

我为 Django 阅读了很多“如何做”一个单独的媒体服务器。但我有自己的决定。

/media - 文件服务器上的目录。我将它安装到我的 django 服务器(SSHFS),所以我可以在那里保存用户图像等。然后我将media_url更改为file server adress/media,在文件服务器上我有nginx,它将分发文件。

它会这样工作吗?

在 django 服务器上不会是一个很大的负载吗?

谢谢。

4

1 回答 1

1

如果我正确理解了您的服务器布局——nginx 正在您的文件服务器上运行,并且它正在将请求代理到另一台服务器上的 Django,它应该可以工作。最好是服务器位于同一 LAN 或数据中心,以减少延迟和网络错误。您还需要确保运行 nginx 工作进程的用户有权访问 /media/。

让 nginx 为媒体和静态目录提供服务将减少 Django 服务器的负载。顺便说一下,Gunicorn 和 uWSGI 是备受推崇的 Django 服务器。

使用 /media/ 目录有点不寻常,因为它通常是为 CDROM 或 USB 闪存驱动器保留的。通常使用/var/www/example.com/media/srv/www/example.com/media使用。

设置

我只是想确保您的域设置正确,因为它会影响 MEDIA_URL 设置的使用方式,特别是如果您从那里提供 Javascript,请多多包涵。如果您的网站是 example.com,您的 DNS 设置应该将 example.com 指向您的 nginx/fileserver IP 地址。

您的设置文件

Django 设置.py

MEDIA_URL = "/media/"

nginx example.conf

root /;在以下示例中看起来很吓人,但请查看文档以验证这一点

server {
    server_name example.com;

    location /media/ {
        root /;
    }

    # OTHER LOCATION RULES

    location / {
        # PROXY RULES HERE
    }
}

访问媒体文件

您的 Django 项目可以使用简单的绝对 URL 来引用您的图像,例如

<img src="/media/user1234/2012/03/04/aeiou.jpg" alt="aeiou">

使用 django.core.context_processors.media、RequestContext 和 {{ MEDIA_URL }}以防万一您将媒体文件移动到 CDN。

<img src="{{ MEDIA_URL }}/user1234/2012/03/04/aeiou.jpg" alt="aeiou">
于 2013-10-31T02:35:43.767 回答