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   °。+ *´¨)          .· ´¸.·*´¨) ¸.·*¨)           (¸.·´ (¸.·'* ☆
Pavel
а в чем прикол давать названия директориям в виде директив модуля?
к примеру в том что эти директивы обрабатываются в опередеенном порядке. и имеют разный контекст выполнения.
Pavel
им можно дать более асбтрактные названия….но кажется что директивы таки проще
Maxim
к примеру в том что эти директивы обрабатываются в опередеенном порядке. и имеют разный контекст выполнения.
так как это связано с именованием директорий? чтоб не забыть как они пишутся?
Pavel
эм…. нужно явно разделять пласты логики, выполняющиеся на каждом этапе процессинга запроса, согласен?
Maxim
эм…. нужно явно разделять пласты логики, выполняющиеся на каждом этапе процессинга запроса, согласен?
согласен, но зачем вам в имени директории "_by_lua_file"? в чем её сакральный смысл?
Pavel
думаю что phase1/ phase2/ будут хуже
Snusmumriken
Хе, мне казалось что проще наборами типа: /auth/ - access.lua - rewrite.lua etc, но не принципиально, да
Maxim
думаю что phase1/ phase2/ будут хуже
чем вас не устраивает более короткие типа init log header_filter access ? зачем в именах директорий _by_lua_file?
Pavel
Эм…..это был именно пример, если заруба именно в суффиксе _by_lua_file то смысла в зарубе нет
Maxim
Не критично же
да не критично, мой вопрос именно в том зачем эту часть постоянно дублировать?
Snusmumriken
да не критично, мой вопрос именно в том зачем эту часть постоянно дублировать?
Чтобы нам в чате было очевидно, зачем оно нужно, дабы не писать полностью location
Pavel
+
Roman
/vzhuh@FailsBot
Snusmumriken
Привет @evgeny_smi, расскажи немного о себе : ) Но перед этим/после этого прочитай шапку!
Maxim
Привет @evgeny_smi, расскажи немного о себе : ) Но перед этим/после этого прочитай шапку!
Не испугай Евгения, а то ща как даст по тапкам и будет думать про нас всякие гадости
Snusmumriken
Не испугай Евгения, а то ща как даст по тапкам и будет думать про нас всякие гадости
Этот шаг был обоснован сразу несколькими факторами, так что норм.
Maxim
Этот шаг был обоснован сразу несколькими факторами, так что норм.
Ну будем надеяться Евгений наберется смелости и поздоровается с присутствующими в аудитории
FailsBot
∧_∧ ( ・ω・。)つ━☆・*。 ⊂  ノ    ・゜+. しーJ   °。+ *´¨)          .· ´¸.·*´¨) ¸.·*¨)           (¸.·´ (¸.·'* ☆
Dadaskis
Привет @evgeny_smi, расскажи немного о себе : ) Но перед этим/после этого прочитай шапку!
Что-то меня не так ярко приветствовали когда я сюда пришёл :D
Dadaskis
Надо бы его доп.инфу скопировать себе... (сделаю битые линки, хехехе)
Snusmumriken
Что-то меня не так ярко приветствовали когда я сюда пришёл :D
Вот-вот, хочешь внимания и ярких приветствий — просто добавь в био рекламу.
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 то там подобное получить можно, но не создавать же перед каждой попыткой обращения в апстрим дополнительный коннект только ради проверки..
Aleksey
а в чем он может помочь в этой ситуации?
Pavel
если что syntax: state_name, status_code = balancer.get_last_failure() error там не фигурирует
Pavel
Вообще - кажется body ответа не доступен. можешь перейти в body_filter_by_lua
Pavel
там можно
Aleksey
так там тоже нет деталей ошибки, только статус код
Pavel
попробуй довольствоваться им_)
Aleksey
к сожалению, нужно получать именно причину ошибки а не общий безликий статус код
Pavel
у меня умных мылсей больше нет. именно такую задачу не решал
Maxim
а в чем он может помочь в этой ситуации?
поможет увидеть что вокруг, а не только в той точке куда вы смотрите
Aleksey
но ведь 502 ровно то и значит, что бекенд не доступен
он может быть не доступен по разным причинам, и вот эти причины видны в error логе, а надо получать причину в lua в конеткстах, когда еще можно изменить ответ nginxa
mva
насколько я помню, 502 - однозначно refused, 504 - однозначно timeout, 500 - однозначно ошибка в коде приложения, а 503 вот уже может иметь разночтения, но тут уж хз
Pavel
тебе могут пульнуть в ответ 10 метров body ты его запихаешь в lua и упадешь на 100rps
Aleksey
нет необходимости читать body, т.к. если апстрим сфейлился - тела не будет
mva
кстати, connect() и не может вернуть 503, емнип
Pavel
bad gateway может быть вызван разными причинам, не только refused
1) какие варианты поведения у тебя есть?
Pavel
2) если ошибку бросил твой собственный сервер, то почему бы тебе не использовать другие http-коды и четко по ним понимать
mva
bad gateway может быть вызван разными причинам, не только refused
мне вообще сдаётся что сам этот connect() происходит в другом месте. И ты никак его не перехватишь. И status_code выставляется с учётом его результата. Если тебе нужна более подробная ошибка, нежели код - можешь попробовать открыть issue на гитхабе товарищей кетайсов из openresty
mva
потому что на гитхабе надо :)
mva
впрочем, и там не факт
mva
но там хоть полайкать могут, и PR сделать
Aleksey
гитхаб для багов а не вопросов, но согласен, что отвечают там оперативнее)
mva
у него ж балансер
Aleksey
отображать ее в кастомной error page пользователю, т.к. моя инсталяция выступает в кач-ве прокси
mva
вот он и хочет знать, стоит ли пытаться на другой бекенд перекидывать
mva
отображать ее в кастомной error page пользователю, т.к. моя инсталяция выступает в кач-ве прокси
проще отключить перехват error-страниц и возвращать тело, которое вернул бекенд (если таковое было)
Aleksey
проще отключить перехват error-страниц и возвращать тело, которое вернул бекенд (если таковое было)
так бэкенд ничего не вернет, т.к. соединение с ним не было установлено
mva
на этот случай у ngx есть свои error_page'и
mva
ну, короче, именно это можн ореализовать и без lua
mva
даже красивые странички отдать
mva
и я более чем уверен, что юзеру не особо нужен результат работы сисколла connect()
mva
и статускода, как правило, хватит. Ну, мне так кажется...
Aleksey
насколько я помню, 502 - однозначно refused, 504 - однозначно timeout, 500 - однозначно ошибка в коде приложения, а 503 вот уже может иметь разночтения, но тут уж хз
поизучал вопрос про 502, еще может быть (как минимум) no live upstreams. думаю, там еще ssl ошибки (если включена валидация сертификатов) могу быть. но в большинстве кейсов конечно refused вообщем обойдусь обычным error темплейтом но спасибо всем за помощь
Snusmumriken
502 вполне может возвращать тело, то самое которое ты видишь в браузере по этому поводу. У нгинксов под него есть шаблончики. Хотя у браузеров, обычно тоже. Те самые странички, где описано "что делать? повторить позже или обратиться по правильной ссылке", но оно подставляется в случае отсутствия тела от сервера. Любой ответ на любой запрос может иметь тело, хоть ошибка хоть редирект, в формате html, json, raw text или чего-то ещё. И наоборот, может не иметь тела.
Lucky
Lucky
Снус, прийди, порядок наведи https://habr.com/ru/company/mailru/blog/442588/#comment_19839920
Saphire
Добавить в pcall на "местную" _G метаметод newindex который бы отлавливал обращения к несуществующим глобальным..
Lucky
Тот самый случай, когда Лёрн х ту у минутс вместо документации и надо срочно потелебонькать создателя языка. Потому что документация же толстая и сложнаа
Snusmumriken
В жавакрипте, для схожего эффекта надо заворачивать всё в отдельную функцию, и то не факт что там нет изменений во внешнем скоупе. А тут достаточно просто аккуратно писать, и, если уж так невтерпёж, перед загрузкой скрипта сохранить список ключей в _G, а после загрузки — проверить появление новых ключей, на случай если где-то опростоволосился и сделал что-то глобальным. А ещё есть luacheck, который делает то же самое, и ещё немножко больше.
Saphire
У луа ОЧЕНЬ ОЧЕНЬ хороший мануал