Pavel
прямо сейчас склоняюсь к варианту вида
/access_by_lua_file/init.lua
/access_by_lua_file/firewall.lua
/access_by_lua_file/requestFilters.lua
/access_by_lua_file/auth.lua
/access_by_lua_file/metrics.lua
zi
/vzhuh@FailsBot
FailsBot
∧_∧
( ・ω・。)つ━☆・*。
⊂ ノ ・゜+.
しーJ °。+ *´¨)
.· ´¸.·*´¨) ¸.·*¨)
(¸.·´ (¸.·'* ☆
Maxim
Pavel
им можно дать более асбтрактные названия….но кажется что директивы таки проще
Maxim
Pavel
эм….
нужно явно разделять пласты логики, выполняющиеся на каждом этапе процессинга запроса, согласен?
Maxim
Pavel
думаю что phase1/ phase2/ будут хуже
Snusmumriken
Хе, мне казалось что проще наборами типа:
/auth/
- access.lua
- rewrite.lua
etc, но не принципиально, да
Snusmumriken
Pavel
Эм…..это был именно пример, если заруба именно в суффиксе _by_lua_file то смысла в зарубе нет
Maxim
Не критично же
да не критично, мой вопрос именно в том зачем эту часть постоянно дублировать?
Pavel
+
Maxim
Roman
/vzhuh@FailsBot
Snusmumriken
Привет @evgeny_smi, расскажи немного о себе : )
Но перед этим/после этого прочитай шапку!
Maxim
Snusmumriken
FailsBot
∧_∧
( ・ω・。)つ━☆・*。
⊂ ノ ・゜+.
しーJ °。+ *´¨)
.· ´¸.·*´¨) ¸.·*¨)
(¸.·´ (¸.·'* ☆
Dadaskis
Dadaskis
Надо бы его доп.инфу скопировать себе... (сделаю битые линки, хехехе)
Lucky
С таким био и не забанен?
Egor
Насторойка, епт
Dmitry
@Snusmumriken, я Снусмумрик, а ты?)
https://mel.fm/test2/7248651-moomins_test
Dmitry
Для lua есть доктесты (генерация тестов прямо из примеров в документации к функциям) кроме этого порта, которому 4 года github.com/saucisson/lua-doccotest?
Aleksey
Подскажите пожалуйста по openresty, как реализовать получение ошибок connect() при коннекте к апстримам nginx'a.
пробую это
https://github.com/openresty/lua-resty-core/blob/master/lib/ngx/balancer.md#get_last_failure
balancer_by_lua_block {
local balancer = require "ngx.balancer"
local state, code, err = balancer.get_last_failure()
ngx.log(ngx.ERR, "state: ", state, ", code: ", code, ", err: ", err)
}
но в error.log выводит
[lua] balancer_by_lua:22: state: failed, code: 502, err: nil while connecting to upstream
и штатная ошибка
connect() failed (111: Connection refused) while connecting to upstream
Задача получить в Lua именно вот эту Connection refused, чтобы можно было с этим работать и выводить кастомную 502 с детальным описанием ошибки.
если использовать
https://github.com/openresty/lua-nginx-module#tcpsockconnect
то там подобное получить можно, но не создавать же перед каждой попыткой обращения в апстрим дополнительный коннект только ради проверки..
Maxim
Подскажите пожалуйста по openresty, как реализовать получение ошибок connect() при коннекте к апстримам nginx'a.
пробую это
https://github.com/openresty/lua-resty-core/blob/master/lib/ngx/balancer.md#get_last_failure
balancer_by_lua_block {
local balancer = require "ngx.balancer"
local state, code, err = balancer.get_last_failure()
ngx.log(ngx.ERR, "state: ", state, ", code: ", code, ", err: ", err)
}
но в error.log выводит
[lua] balancer_by_lua:22: state: failed, code: 502, err: nil while connecting to upstream
и штатная ошибка
connect() failed (111: Connection refused) while connecting to upstream
Задача получить в Lua именно вот эту Connection refused, чтобы можно было с этим работать и выводить кастомную 502 с детальным описанием ошибки.
если использовать
https://github.com/openresty/lua-nginx-module#tcpsockconnect
то там подобное получить можно, но не создавать же перед каждой попыткой обращения в апстрим дополнительный коннект только ради проверки..
вы уже воспользовались дэбагером?
Aleksey
а в чем он может помочь в этой ситуации?
Pavel
если что syntax: state_name, status_code = balancer.get_last_failure()
error там не фигурирует
Pavel
Вообще - кажется body ответа не доступен. можешь перейти в body_filter_by_lua
Pavel
там можно
Aleksey
так там тоже нет деталей ошибки, только статус код
Pavel
попробуй довольствоваться им_)
Aleksey
к сожалению, нужно получать именно причину ошибки а не общий безликий статус код
Pavel
у меня умных мылсей больше нет. именно такую задачу не решал
mva
Pavel
mva
насколько я помню, 502 - однозначно refused, 504 - однозначно timeout, 500 - однозначно ошибка в коде приложения, а 503 вот уже может иметь разночтения, но тут уж хз
Pavel
тебе могут пульнуть в ответ 10 метров body
ты его запихаешь в lua
и упадешь на 100rps
Aleksey
нет необходимости читать body, т.к. если апстрим сфейлился - тела не будет
mva
кстати, connect() и не может вернуть 503, емнип
Aleksey
Pavel
Pavel
2) если ошибку бросил твой собственный сервер, то почему бы тебе не использовать другие http-коды и четко по ним понимать
mva
bad gateway может быть вызван разными причинам, не только refused
мне вообще сдаётся что сам этот connect() происходит в другом месте. И ты никак его не перехватишь. И status_code выставляется с учётом его результата.
Если тебе нужна более подробная ошибка, нежели код - можешь попробовать открыть issue на гитхабе товарищей кетайсов из openresty
Aleksey
mva
потому что на гитхабе надо :)
mva
впрочем, и там не факт
mva
но там хоть полайкать могут, и PR сделать
Aleksey
гитхаб для багов а не вопросов, но согласен, что отвечают там оперативнее)
mva
у него ж балансер
Aleksey
отображать ее в кастомной error page пользователю, т.к. моя инсталяция выступает в кач-ве прокси
mva
вот он и хочет знать, стоит ли пытаться на другой бекенд перекидывать
Aleksey
mva
на этот случай у ngx есть свои error_page'и
mva
ну, короче, именно это можн ореализовать и без lua
mva
даже красивые странички отдать
mva
и я более чем уверен, что юзеру не особо нужен результат работы сисколла connect()
mva
и статускода, как правило, хватит.
Ну, мне так кажется...
Snusmumriken
Snusmumriken
502 вполне может возвращать тело, то самое которое ты видишь в браузере по этому поводу. У нгинксов под него есть шаблончики. Хотя у браузеров, обычно тоже. Те самые странички, где описано "что делать? повторить позже или обратиться по правильной ссылке", но оно подставляется в случае отсутствия тела от сервера.
Любой ответ на любой запрос может иметь тело, хоть ошибка хоть редирект, в формате html, json, raw text или чего-то ещё. И наоборот, может не иметь тела.
Lucky
Lucky
Снус, прийди, порядок наведи https://habr.com/ru/company/mailru/blog/442588/#comment_19839920
Saphire
Saphire
Добавить в pcall на "местную" _G метаметод newindex который бы отлавливал обращения к несуществующим глобальным..
Lucky
Тот самый случай, когда Лёрн х ту у минутс вместо документации и надо срочно потелебонькать создателя языка. Потому что документация же толстая и сложнаа
Snusmumriken
Snusmumriken
В жавакрипте, для схожего эффекта надо заворачивать всё в отдельную функцию, и то не факт что там нет изменений во внешнем скоупе.
А тут достаточно просто аккуратно писать, и, если уж так невтерпёж, перед загрузкой скрипта сохранить список ключей в _G, а после загрузки — проверить появление новых ключей, на случай если где-то опростоволосился и сделал что-то глобальным.
А ещё есть luacheck, который делает то же самое, и ещё немножко больше.
Saphire
Saphire
У луа ОЧЕНЬ ОЧЕНЬ хороший мануал