我为 Django 阅读了很多“如何做”一个单独的媒体服务器。但我有自己的决定。
/media - 文件服务器上的目录。我将它安装到我的 django 服务器(SSHFS),所以我可以在那里保存用户图像等。然后我将media_url更改为file server adress
/media,在文件服务器上我有nginx,它将分发文件。
它会这样工作吗?
在 django 服务器上不会是一个很大的负载吗?
谢谢。
我为 Django 阅读了很多“如何做”一个单独的媒体服务器。但我有自己的决定。
/media - 文件服务器上的目录。我将它安装到我的 django 服务器(SSHFS),所以我可以在那里保存用户图像等。然后我将media_url更改为file server adress
/media,在文件服务器上我有nginx,它将分发文件。
它会这样工作吗?
在 django 服务器上不会是一个很大的负载吗?
谢谢。
如果我正确理解了您的服务器布局——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">