ngx.location.capture 只支持相对路径,不能用绝对路径

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ngx.location.capture 只支持相对路径,不能用绝对路径相关的知识,希望对你有一定的参考价值。

ngx.location.capture 是非阻塞的,ngx.location.capture也可以用来完成http请求,但是它只能请求到相对于当前nginx服务器的路径,不能使用之前的绝对路径进行访问,但是我们可以配合nginx upstream实现我们想要的功能。

在nginx.cong中的http部分添加如下upstream配置

upstream backend {
    server s.taobao.com;
    keepalive 100;
}
在example.conf配置如下location

     location ~ /proxy/(.*) {
        internal;
        proxy_pass http://backend/$1$is_args$args;
     }

lua 请求可以这么写:

local resp = ngx.location.capture("/proxy/search", {
    method = ngx.HTTP_GET,
    args = {q = "hello"}

})
if not resp then
    ngx.say("request error :", err)
    return
end
ngx.log(ngx.ERR, tostring(resp.status))

--获取状态码
ngx.status = resp.status

--获取响应头
for k, v in pairs(resp.header) do
    if k ~= "Transfer-Encoding" and k ~= "Connection" then
        ngx.header[k] = v
    end
end
--响应体
if resp.body then
    ngx.say(resp.body)
end

 

以上是关于ngx.location.capture 只支持相对路径,不能用绝对路径的主要内容,如果未能解决你的问题,请参考以下文章

lua-nginx-module模块常用命令

TextView与Html相结合的具体方法?

Java支持的图像文件格式?

notion和trello相比较,你更看好哪一个?

SQL - 我需要制定一个条件来限制选择只显示与这两个条件相对应的行

Hive中的Join总结