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

问题描述 投票:0回答:1

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

django nginx
1个回答
0
投票

解决方案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并从那里扩展。

© www.soinside.com 2019 - 2024. All rights reserved.