django的另一台主机上的媒体服务器。这是正确的方法吗?

时间:2013-10-30 14:17:31

标签: python django nginx shared-hosting

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

/ media - 文件服务器上的dir。我将它挂载到我的django服务器(SSHFS),因此我可以保存用户图像等。然后我将 media_url 更改为file server adress / media,在文件服务器上我有 nginx ,将分发文件。

这样会这样吗?

这对django服务器来说不是很大的负担吗?

感谢。

1 个答案:

答案 0 :(得分:0)

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

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

将/ media /目录用作usually reserved for CDROMs or USB flash drives是有点不寻常的。通常使用/var/www/example.com/media/srv/www/example.com/media

设置

我只是想确保您的域名设置正确,因为它会影响MEDIA_URL设置的使用方式,特别是如果您从那里提供Javascript,请耐心等待。如果您的网站是example.com,则您的DNS设置应将example.com指向您的nginx /文件服务器IP地址。

您的设置文件

Django settings.py

MEDIA_URL = "/media/"

nginx example.conf

root /;在以下示例中看起来很可怕,但have a look at the docs to verify this

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">

use django.core.context_processors.media, RequestContext and {{ MEDIA_URL }}以防您将媒体文件移至CDN。

<img src="{{ MEDIA_URL }}/user1234/2012/03/04/aeiou.jpg" alt="aeiou">