我有2台服务器:第一台用于Nginx和Django,第二台用于存储
Nginx and app server IP: 192.168.1.1
storage server IP: 192.168.1.2
Nginx安装在两台服务器上。
在Django配置媒体路径中:
MEDIA_ROOT = os.path.join(BASE_DIR,'media')
MEDIA_URL = '/media/'
Nginx配置在第一台服务器中
server {
listen 80;
server_name 192.168.1.1;
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log ;
location = /favicon.ico { access_log off; log_not_found off; }
location /media/ {
proxy_pass http://192.168.1.2/;
}
location / {
uwsgi_pass unix:/tmp/uwsgi/app.sock;
include uwsgi_params;
}
location /static/ {
alias /home/ubuntu/app/static/;
}
}
和存储服务器Nginx配置:
server {
listen 80;
server_name 192.168.1.2;
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log ;
location /media/ {
alias /home/ubuntu/app/media;
}
}
问题:
Django如何将(上传文件)保存到存储服务器(192.168.1.2)?
最好提供建议,以使代码更改最少。
Nginx如何从存储服务器撤消文件?
最终用户只需输入192.168.1.1
答案 0 :(得分:0)
解决方案1:网络文件系统(NFS)
NFS的示例是GlusterFS。
它的作用是,使多个磁盘或服务器作为单个目录可用。因此,您可以对其进行配置,以将另一台服务器显示为媒体目录,以及放置在该服务器上的任何文件,它将自动存储在另一台服务器中。而且,即使它们在另一台计算机上,也可以将它们当作媒体目录中的文件来获取。无需更改您的Django代码或nginx配置。
解决方案2:自定义文件存储后端
另一种解决方案是编写自己的File Storage backend并将图像从那里保存到第二台服务器。实际上,有一个名为django-storages
的库,它支持使用FTP将文件上传到另一台服务器。查看文档:{{3}}
就我个人而言,第二种解决方案对我来说似乎更好,因为您现在真的不需要NFS。即使以后再做,也可以在第二台服务器上安装Gluster并从那里扩展。