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

问题描述:

首先,我会向你解释我的情况。我正在构建一个服务器来存储和检索我的手机应用程序的数据。我是NGINX的新手。我知道使用负载平衡/反向代理的意思是通过将工作负载分布到多个服务器来提高性能和可靠性。但我不明白,它处理图像/视频文件。假设下面是我的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

如果你的服务器没有共同的共享存储,那么你需要总是发送上传和检索到“一个特定的服务器”,可能根据位置。 HTH。 – rogerdpack

+0

@rogerdpack thx回复。我如何创建公共共享存储?任何链接建议?旁边你建议使用亚马逊s3来处理这些文件吗? – user3651999

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

前两个选项在逻辑上相同并提供失败转移,因此提高了可靠性。如您注意的,第三个选项不会提高可靠性(可能某种程度上,如果一台服务器发生故障,可能仍会服务某些文件)。但是,如果您对不同文件有多个并发请求并在服务器之间均匀分配,它可以提高性能。这不是通过nginx负载平衡实现的,而是根据请求(例如文件名或密钥)重定向到不同的服务器。

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

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

请注意,正确设置这些选项中的任何一个都可能涉及相当于重大努力,测试和维护。

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