У меня есть требование, сервер возвращает ответ, отправляет запрос на другой сервер, но опенресты говорят, что API отключен в контексте body_filter_by_lua*. я использую модуль resty.http. Благодарность
openresty на сокет отправки body_filter_by_lua
Ответы (1)
Вы можете изменить основную логику.
Сначала выдайте подзапрос к вашему восходящему потоку (location.capture или lua-resty-http)
В случае успеха вы можете сначала отправить ответ вниз по потоку с помощью кода Lua и отправить следующий подзапрос на ваш «другой сервер» из Lua.
ОБНОВЛЕНИЕ. Это не работает. В качестве второго подхода вы можете рассматривать свой «другой сервер» как восходящий и разрешать запросы к этому восходящему потоку только в том случае, если подзапрос к исходному серверу будет успешным.
Для обоих сценариев вы можете использовать access_by_lua* и content_by_lua*, где доступен cosocket API.
person
Alexander Altshuler
schedule
14.02.2017
в access_by_lua* не могу получить статус ответа, а в content_by_lua_* я не знаю, как вернуть html пользователю. 1: пользователь -> сервер 2: сервер -> отправить текущий запрос -> другой сервер 3: сервер -> отправить текущий ответ -> другой сервер 4: вернуть текущий ответ пользователю, а не lua сказать или что-то другое. просто возврат сервера
- person Mad-Hades; 14.02.2017
Я не понимаю вашего вопроса. Вы можете использовать ngx.say() для возврата html с content_by_lua*
- person Alexander Altshuler; 14.02.2017
github.com/openresty/lua-nginx-module#ngxlocationcapture достаточно хорош документация о возвращенном ответе, включая статус
- person Alexander Altshuler; 14.02.2017
я видел этот документ. я, возможно, верну пользовательский ответ или верну ответ источника. как использовать ответ источника возврата ngx.say?
- person Mad-Hades; 14.02.2017
не только это. первый - получить статус ответа, а второй - вернуть ответ источника пользователю... но в content_by_lua нужно, чтобы lua сгенерировал ответ.. я знаю, как получить статус ответа, но я не знаю, как вернуть ответ источника пользователю в content_by_lua_ *. ты понимаешь, что я имею в виду? друг ... спасибо
- person Mad-Hades; 15.02.2017
Было решено. В header_filter я установил content_len равным нулю, а тело изменения тела.. будет работать
- person Mad-Hades; 16.02.2017