NGINX 反向代理如何处理 image/video 文件上传或下载

How NGINX Reverse Proxy handle image/video file upload or download

首先,我将向您解释一下我的情况。我正在构建一个服务器来为我的 phone 应用程序存储和检索数据。我是 NGINX 的新手。我所知道的使用 load balancing/reverse 代理的要点是通过在多个服务器上分配工作负载来提高性能和可靠性。但是我在使用 image/video 文件时不明白。假设下面是我的 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;
    }
}

我的问题很少。

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

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

第三,amazon s3真的更适合存储文件吗?它的成本更便宜吗?

我正在寻找除了使用第三方之外还可以通过我自己的服务器完成的解决方案。

感谢任何帮助!!

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

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

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

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

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

请注意,正确设置任何这些选项都需要相当 大量的工作、测试和维护。

S3 来了,随时可以使用 distributed/shared 存储,具有简单 API、集成、客户端和合理的价格。对于简单的解决方案,通常在每个存储的美元方面并不便宜,但在研发方面要便宜得多。它还可以选择通过 http(平衡、可靠和分布式)为 flies 和内容提供服务,因此您可以直接从 S3 主机在客户端下载文件,或者从您的 http 服务器进行永久或临时重定向。