我正在开发一个类似于Imgur的项目,但仅限于客户。 我使用NGINX作为我的networking服务器和PHP-FPM / MYSQL来处理剩下的事情。 我将最终遇到的一个速度缓冲区将耗尽服务器空间。 我希望能够根据需要添加更多的存储服务器。 虽然我知道云存储可能是在我的情况下,这是目前不是一个选项的最佳途径。
所以让我说我有3个存储服务器都运行NGINX,我们将其称为storage1,storage2和storage3。 如果我服务的域如i.myimagehost.com的请求,我需要find一种方法告诉NGINX在哪里代理从我的PHP-FPM脚本或MYSQL数据库reqyest。
另一个例子:
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;}
这只是我试图完成的一个粗略的例子。 由于每个图像名称将是随机的,我将无法设置关键范围来确定服务器。 它需要来自数据库。 我不确定是否有可能这样做,但任何帮助将不胜感激。
我的道歉,你从数据库查询位置的build议解决scheme看起来过于复杂。 从我所了解的情况来看,您似乎一定要使用一些分布式存储解决scheme。
首先想到的是基于minio的S3类存储和nginx作为反向代理。 在这样的设置中,minio应该以分布式模式工作,而nginx将处理负载平衡。 Minio是简单和轻量级足以在30分钟内提出。
快速的谷歌search给了我完全的设置:
实际上,它与您的build议方法看起来非常相似,但所有与存储相关的逻辑都是由minio处理的。 希望它能帮助你一点点!