我为Django阅读了很多“如何做”单独的媒体服务器。但我有自己的决定。
/ media - 文件服务器上的dir。我将它挂载到我的django服务器(SSHFS),因此我可以保存用户图像等。然后我将 media_url 更改为file server adress
/ media,在文件服务器上我有 nginx ,将分发文件。
这样会这样吗?
这对django服务器来说不是很大的负担吗?
感谢。
答案 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">