lua-resty-http:connect method clarification
我一直在实现一个kong插件,该插件需要发出HTTP请求以检索信息以与上游服务共享。
有一个很棒的库叫做lua-resty-http,可以用来发出HTTP请求。
包含所需信息的服务,该服务在代理后面配置,并且与以下路径匹配:
目标是依靠代理功能来避免必须解析主机名,该主机名具有与此问题无关的某些特殊形式。
通过玩耍,我可以通过执行以下操作来达到所需的行为:
1 2 3 4 5 6 7 | local ok, err = http_client:connect("127.0.0.1", ngx.var.server_port) if not ok and err then return nil, 'there was a failure opening a connection: ' .. err local res, err = http_client:request({ method = 'GET', path = '/endpoint-providing-info' }) //parse the response, etc... |
请求被路由到上游服务,并按预期工作。
我主要关注的是以下内容:
通过连接到本地主机,我假设当前Nginx节点是参加请求的节点。这会影响性能吗?直接连接到集群是否更好/可行?
我想您为当前nginx配置一个与
如果您要使用lua-resty-http:
优点-您可以使用body_reader-一个迭代器函数,以流方式读取正文。
缺点-您的请求将通过内核边界(回送接口)。
另一种可能性是使用ngx.location.capture API发出子请求。
优点-子请求仅模仿HTTP接口,但没有额外的HTTP / TCP流量或IPC。一切都在C级别内部高效地进行。
缺点-这是完全缓冲的方法,无法有效应对较大的响应。
更新-IMO:
如果您希望上游服务器做出很大的响应,那么-lua-resty-http是您的选择。
如果您希望上游服务器提供许多小的响应,则应使用