我知道可以使用 Nginx 将请求分散到多个 Web 服务器上,从而实现负载平衡。此解决方案需要后端服务器具有高带宽,并且在处理大量请求时非常有效。
我希望将单个 http 请求分散到多个服务器上,以便累积带宽。在寻找实现此目的的方法时,我发现了按范围发送 http 请求的概念。
是否可以让 nginx 将主 http 请求拆分为分布在镜像服务器上的较小 http 范围请求?我更愿意避免重写所有 web 脚本,让它们完成这项工作。
答案1
使用 Nginx 可以实现这一点mod_lua
,但实现起来可能相当复杂,并且需要对后端应用程序进行大量更改,因为您的后端需要能够使用 Nginx 可以组合在一起的页面部分进行响应。这将要求您在 Nginx 配置中编写 lua 脚本来收集多个后端的输出(这可以并行完成),然后将它们合并为一个响应。
或者,你也可以直接使用 OpenResty,你可以从这里。它是 Nginx 的一个修改版,主要由的作者完成mod_lua
,非常适合您的要求。
为了并行执行多个后端请求,您需要ngx.location.capture_multi
在 lua 脚本中使用。这是一个显示语法的示例:
res1, res2, res3 = ngx.location.capture_multi{
{ "/foo", { args = "a=3&b=4" } },
{ "/bar" },
{ "/baz", { method = ngx.HTTP_POST, body = "hello" } },
}
您可以找到有关其语法的更详尽的文档这里。