NGINX反向代理如何处理图像/视频文件上传或下载

时间:2016-12-05 14:39:25

标签: nginx load-balancing reverse-proxy mobile-application

首先,我将向您解释我的情况。我正在构建一个服务器,用于存储和检索手机应用程序的数据。我是NGINX的新手。我所知道的使用负载平衡/反向代理的目的是通过在多个服务器之间分配工作负载来提高性能和可靠性。但是我在使用图像/视频文件时并不理解。下面说的是我的NGINX配置文件

upstream backend  {
    server backend1.example.com;
    server backend2.example.com;
    server backend3.example.com;
}    
server {
    listen   80; 

    server_name example.com; 

    location / {
        proxy_pass  http://backend;
    }
}

我在这里几乎没有问题。

首先,当我上传图像/视频文件时,是否需要将图像上传到所有后端服务器或其他方式?

第二,如果我只是将它保存到一个只存储图像的单独服务器,而我请求和下载图像或视频文件我将它代理到指定的服务器那么从反向代理到图像/视频文件的负载平衡点是什么是通过在多个服务器之间分配工作负载来提高性能和可靠性吗?

第三,亚马逊s3真的更适合存储文件吗?价格便宜吗?

我正在寻找可以通过我自己的服务器在第三方旁边完成的解决方案。

Thx任何帮助!!

1 个答案:

答案 0 :(得分:2)

您可以使用共享存储,例如NFS,或上传到两个服务器,或合并策略以在服务器之间分发文件,将每个文件存储在单个服务器上。

前两个选项在逻辑上是相同的,并提供失败转移,从而提高可靠性。

第三个选项,正如您所注意到的,不会提高可靠性(可能以某种方式,如果一个服务器出现故障,则可能仍会提供某些文件)。但是,如果您对不同文件有许多并发请求并在服务器之间平均分配,则可以提高性能。这不是通过nginx负载平衡来实现的,而是通过基于请求(例如文件名或密钥)重定向到不同的服务器来实现的。

对于共享存储解决方案,您可以使用NFS,例如NFS。有许多资源可以深入细致,例如https://unix.stackexchange.com/questions/114699/nfs-automatic-fail-over-or-load-balanced-or-clustering

对于重复上传解决方案,您可以从客户端发送两次文件,也可以使用某些代码在服务器端执行。服务器端解决方案具有来自客户端的单个文件流量和仅在快速网络上发送到第二个服务器的优势。在简单的情况下,这可以通过例如在servlet中接收文件,将输入数据存储到磁盘并同时通过http或其他协议上载到第二服务器上的另一个servlet来实现。

请注意,正确设置这些选项可能涉及相当重大工作,测试和维护。

这里有S3,随时可以使用分布式/共享存储,具有简单的API,集成,客户端和合理的价格。对于简单的解决方案,通常它在每个存储空间方面并不便宜,但在R& D方面要便宜得多。它还可以选择通过http(平衡,可靠和分布式)提供苍蝇和内容,因此您可以直接从S3主机下载客户端中的文件,也可以从http服务器进行永久或临时重定向。