我想请求一些api并将响应设置为nginx变量。但它说"set_by_lua_block" directive is not allowed here
。我怎样才能做到这一点?
http {
set_by_lua_block $hostIp {
local http = require 'resty.http'
local httpc = http.new()
local res, err = httpc:request_uri('http://some-pai')
local body, err = res:read_body()
ngx.log(ngx.INFO, "Using ngx.INFO")
ngx.log(ngx.INFO, body)
return body
}
...
}
答案 0 :(得分:1)
上下文中不允许使用set_by_lua_block
https://github.com/openresty/lua-nginx-module#set_by_lua
set_by_lua_ *可以在服务器上下文中使用。
但是你的代码无论如何都行不通,因为resty.http使用了cosocket API。
目前至少禁用了以下API函数 set_by_lua的上下文:
输出API函数(例如,ngx.say和ngx.send_headers)
控制API函数(例如,ngx.exit)
子请求API函数(例如,ngx.location.capture和ngx.location.capture_multi)
Cosocket API函数(例如,ngx.socket.tcp和ngx.req.socket)。
睡眠API函数ngx.sleep。
如果你真的需要在nginx启动之前请求一次 - 编写脚本并设置环境变量。然后
set_by_lua $my_var 'return os.getenv("MY_VAR")';