使用 NGINX 从多个存储服务器提供图像

使用 NGINX 从多个存储服务器提供图像

我正在开发一个类似于 Imgur 的项目,但仅供客户使用。我使用 NGINX 作为我的网络服务器,并使用 PHP-FPM/MYSQL 处理其余部分。我最终会遇到的一个障碍是服务器空间不足。我希望能够在需要时添加更多存储服务器。虽然我知道云存储可能是实现此目的的最佳途径,但就我而言,目前这不是一个选择。

假设我有 3 个存储服务器,它们都运行 NGINX,我们将它们称为 storage1、storage2 和 storage3。如果我要处理来自 i.myimagehost.com 等域的请求,我需要找到一种方法来告诉 NGINX 在哪里代理来自我的 PHP-FPM 脚本或 MYSQL 数据库的请求。

另一个例子:

i.imagehost.com/1234.jpg - hosted on storage1
i.imagehost.com/5678.jpg - hosted on storage2
i.imagehost.com/9012.jpg - hosted on storage3

我想要做的是从我的数据库和/或 PHP-FPM 获取服务器和文件位置,并让 NGINX 通过 proxy_pass 传递它,类似于:

location / {
proxy_pass       http://$storage_server.imagehost.com/$path_to_file;
proxy_set_header Host      $host;
proxy_set_header X-Real-IP $remote_addr;}

这只是我想实现的一个粗略示例。由于每个图像名称都是随机的,因此我无法设置关键范围来确定服务器。它需要来自数据库。我不确定是否可以通过这种方式做到这一点,但任何帮助都将不胜感激。

答案1

抱歉,您建议的解决方案(从数据库查询位置)看起来过于复杂。据我所知,您肯定应该使用某种分布式存储解决方案。
首先想到的是米尼奥基于 S3 的存储,使用 nginx 作为反向代理。在这样的设置下,minio 应该以分布式模式工作,而 nginx 将处理负载平衡。Minio 非常简单轻量,可以在 30 分钟内启动。

通过谷歌搜索我找到了以下设置:

实际上,它看起来与您建议的方法非常相似,但所有与存储相关的逻辑都由 minio 处理。希望它能对您有所帮助!

相关内容