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
相關文章
相關標籤/搜索