2016-12-13 3 views
0

Я хочу запросить некоторый api и задать ответ как переменную nginx. Но он говорит "set_by_lua_block" directive is not allowed here. Как я могу это достичь?Могу ли я использовать lua в открытом HTTP-блоке nginx

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 
    } 

    ... 
} 

ответ

1

set_by_lua_block не допускается в контексте HTTP

https://github.com/openresty/lua-nginx-module#set_by_lua

set_by_lua_ * может быть использован в контексте сервера.

Но ваш код не будет работать, так как resty.http использует API-интерфейс.

По крайней мере, следующие функции API в настоящее время отключены в контексте set_by_lua:

функций выходного API (например, ngx.say и ngx.send_headers)

функции управления API (например, ngx.exit)

подзапрос функции API (например, ngx.location.capture и ngx.location.capture_multi)

функции Cosocket API (е .g., ngx.socket.tcp и ngx.req.socket).

Спящая функция API ngx.sleep.

Если вам действительно нужно запросить что-то один раз перед запуском nginx-write и установить переменную среды. Затем

set_by_lua $my_var 'return os.getenv("MY_VAR")'; 
+0

Теперь я использую скрипт для генерации 'nginx.conf'. Я думал, что Луа справится с этим. – hbrls

Смежные вопросы