我刚刚读到Digital Ocean 文章并想知道拓扑最后的例子中可以用nginx实现。
我对......感兴趣负载平衡器如何处理不在应用服务器前面的两个专用缓存服务器他们这样描述这个过程:
- 负载均衡器检查缓存后端,查看请求的内容是否被缓存(缓存命中)或未被缓存(缓存未命中)
- 如果缓存命中:将请求的内容返回给负载均衡器并跳转到步骤 7。如果缓存未命中:缓存服务器通过负载均衡器将请求转发给应用程序后端
- 负载均衡器将请求转发到应用程序后端
- app-backend 从数据库读取,然后将请求的内容返回给负载均衡器
- 负载均衡器将响应转发给缓存后端
- cache-backend 缓存内容然后将其返回给负载均衡器
- 负载均衡器将请求的数据返回给用户
我猜测负载均衡器应该在上游指令中有两组:
upstream cachebackend {
server cache-1.example.com;
server cache-2.example.com;
}
upstream appbackend {
server app-1.example.com;
server app-2.example.com;
}
然后从服务器指令内部:
location / {
proxy_pass http://cachebackend;
# if that one is a MISS, request this one:
# proxy_pass http://appbackend;
# and then save the response on the cachebackend
# before returning it to the client
}
我想知道如何告诉 nginx 按照上述步骤操作,或者是否有可能。
谢谢 :)
答案1
Nginx 可以同时进行负载平衡和缓存,您只需使用proxy_cache_path
指令配置缓存区域并将其分配给特定server {}
或location {}
使用proxy_cache
。因此,总而言之,如果使用 nginx 同时作为负载均衡器和缓存,Digital Ocean 架构看起来就多余了。