Django + Nginx将升级文件保存到其他服务器并反向文件

时间:2018-10-31 09:32:41

标签: django nginx

我有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

1 个答案:

答案 0 :(得分:0)

解决方案1:网络文件系统(NFS)

NFS的示例是GlusterFS

它的作用是,使多个磁盘或服务器作为单个目录可用。因此,您可以对其进行配置,以将另一台服务器显示为媒体目录,以及放置在该服务器上的任何文件,它将自动存储在另一台服务器中。而且,即使它们在另一台计算机上,也可以将它们当作媒体目录中的文件来获取。无需更改您的Django代码或nginx配置。

解决方案2:自定义文件存储后端

另一种解决方案是编写自己的File Storage backend并将图像从那里保存到第二台服务器。实际上,有一个名为django-storages的库,它支持使用FTP将文件上传到另一台服务器。查看文档:{​​{3}}


就我个人而言,第二种解决方案对我来说似乎更好,因为您现在真的不需要NFS。即使以后再做,也可以在第二台服务器上安装Gluster并从那里扩展。