openresty на сокет отправки body_filter_by_lua

У меня есть требование, сервер возвращает ответ, отправляет запрос на другой сервер, но опенресты говорят, что API отключен в контексте body_filter_by_lua*. я использую модуль resty.http. Благодарность


person Mad-Hades    schedule 13.02.2017    source источник


Ответы (1)


Вы можете изменить основную логику.

Сначала выдайте подзапрос к вашему восходящему потоку (location.capture или lua-resty-http)

В случае успеха вы можете сначала отправить ответ вниз по потоку с помощью кода Lua и отправить следующий подзапрос на ваш «другой сервер» из Lua.

ОБНОВЛЕНИЕ. Это не работает. В качестве второго подхода вы можете рассматривать свой «другой сервер» как восходящий и разрешать запросы к этому восходящему потоку только в том случае, если подзапрос к исходному серверу будет успешным.

Для обоих сценариев вы можете использовать access_by_lua* и content_by_lua*, где доступен cosocket API.

person Alexander Altshuler    schedule 14.02.2017
comment
в access_by_lua* не могу получить статус ответа, а в content_by_lua_* я не знаю, как вернуть html пользователю. 1: пользователь -> сервер 2: сервер -> отправить текущий запрос -> другой сервер 3: сервер -> отправить текущий ответ -> другой сервер 4: вернуть текущий ответ пользователю, а не lua сказать или что-то другое. просто возврат сервера - person Mad-Hades; 14.02.2017
comment
Я не понимаю вашего вопроса. Вы можете использовать ngx.say() для возврата html с content_by_lua* - person Alexander Altshuler; 14.02.2017
comment
github.com/openresty/lua-nginx-module#ngxlocationcapture достаточно хорош документация о возвращенном ответе, включая статус - person Alexander Altshuler; 14.02.2017
comment
я видел этот документ. я, возможно, верну пользовательский ответ или верну ответ источника. как использовать ответ источника возврата ngx.say? - person Mad-Hades; 14.02.2017
comment
не только это. первый - получить статус ответа, а второй - вернуть ответ источника пользователю... но в content_by_lua нужно, чтобы lua сгенерировал ответ.. я знаю, как получить статус ответа, но я не знаю, как вернуть ответ источника пользователю в content_by_lua_ *. ты понимаешь, что я имею в виду? друг ... спасибо - person Mad-Hades; 15.02.2017
comment
Было решено. В header_filter я установил content_len равным нулю, а тело изменения тела.. будет работать - person Mad-Hades; 16.02.2017