Django + Nginx将上传的文件保存到另一台服务器并反向文件

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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:网络文件系统(NFS)

NFS的一个例子是GlusterFS

它的作用是,它使多个磁盘或服务器可用作单个目录。因此,您可以将其配置为将其他服务器显示为媒体目录以及放在其中的任何文件,它将自动存储在您的其他服务器中。您可以像访问媒体目录一样获取这些文件,即使它们位于另一台计算机上也是如此。您的django代码或nginx配置无需更改。

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

另一种解决方案是编写自己的File Storage backend并将图像从那里保存到第二台服务器。事实上,有一个名为django-storages的库,它支持使用FTP将文件上传到另一台服务器。见文档:http://django-storages.readthedocs.io/en/latest/backends/ftp.html


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

以上是关于Django + Nginx将上传的文件保存到另一台服务器并反向文件的主要内容,如果未能解决你的问题,请参考以下文章

SVN主机备份到另一台电脑

Docker镜像保存为文件及从文件导入镜像的方法

Docker镜像保存为文件及从文件导入镜像的方法

jsp如何将图片上传到服务器某个文件夹里面,而路径存到mysql数据库中,然后将数据库中的图片显示到另一页面

代理http上传到另一台服务器

Docker镜像保存为文件及从本地文件导入镜像的方法