Nginxcaching在多个服务器之间共享

我们有8个REST-ish API服务器,Nginx使用FastCGI和PHP-FPM来处理请求。 目前我们正在使用Nginx的FastCGIcaching(指令如fastcgi_cache_path )。 这意味着API响应被caching,但是每个服务器都有独立的caching。

在所有八台服务器之间共享caching存储是否有好的方法?

我们已经考虑使用Redis作为共享存储,但是可用的模块似乎需要更改应用程序。 在某些情况下,我们可能希望caching超出我们控制的响应(通过HTTP到外部API)。 理想情况下,可以使用Nginx内置的FastCGI和HTTP响应caching替代scheme。

关于这个问题,似乎在https://www.nginx.com/blog/shared-caches-nginx-plus-cache-clusters-part-1/上有一个相当新的博客文章。 如果运行两个以上的nginxcaching服务器,这个第一个例子可能是有用的。

特别是这篇文章的第二部分听起来很有趣,我当前的使用情况是,我想自动将已更改的项目重新抓取到我的caching中。

它也应该与NGINX的开源版本一起工作。 基本上,它通过代理每个服务器caching来自相关上游的每个NGINX服务器(Nginx-Cache1-> NGinx-Cache2-> Origin-Server)级联的请求来工作,如果需要,也可以创buildHA群集。 https://www.nginx.com/blog/shared-caches-nginx-plus-cache-clusters-part-2/

您是否考虑过站点加速器/企业级CDN,它位于您的Web服务器之前,例如Akamai Site Accelerator或Fastly https://www.fastly.com/products/apis ,我确信会有替代scheme做一个类似的工作。

在这里,您将您的DNS指向CDN提供商,在那里您创build一个不同的caching规则的负载,然后这个configuration传播到他们的networking边缘服务器,configuration为指向您的原始服务器(通常是您的负载平衡器IP)。 首先点击将查询您的来源,然后caching将传播到整个networking。 这个内容也将更快地到达客户端,因为它将从靠近他们所在的边缘服务器获得服务,而不是始终服务于源服务器,例如,如果客户端位于巴黎,而且客户端在伦敦,他们将获得从他们传送给他们的caching内容边缘服务器靠近巴黎,而不是从英国获得服务。 这也减less了对原始服务器的请求数量。

我们已经创build了Akamaiconfiguration规则,根据URL中的时间值侦听我们的API URL和caching,然后通过它们的CDNnetworking传播出去

 /API/JSON/3600/sometypeofcontenturl/ 

然后在CDN模式上匹配URL

 if URL /API/JSON/3600/(*) cache for (1 hour - 3600 seconds)