А не будет ли столь любезен многоуважаемый джин приоткрыть завесу тайны над своей ачивкой? :) Что там такого интересного-нестандартного произошло?
А то я сам не чужд прекрасного и тоже в данный момент домогаюсь от nginx`a не самого распространённого — а именно проброса через него (в роли реверс-прокси) https`a до внутреннего RDG. Ну вот надо мне! ;)
"Прежде чем писАть, буду читать комментарии"(с) :)) Уже увидал в этой "перловке" ниже по бороде комментариев — разбор nginx`ом URI. Ну ОК, богоугодное занятие. :)
При этом, источник файлов приходит в виде структурированного архива с совсем другой иерархией (например, files/png/1234/1234567-89012.png), а если файла нет на месте, то его нужно запросить у внешнего сервера, находящегося не под моим контролем, по URI исходного вида, но сохранить в ту же иерархию, что и остальные файлы.
В итоге, конфиг nginx-а для обработки запроса выглядит так:
Логика обработки: Путь к файлу из URI трансформируется в корректный при получении запроса (тут работает многопоточность nginx-а), а если файла нет, то исходный URI и реальный путь передаются для скачивания и сохранения процессу, обслуживающему API-запросы (см. upstream и proxy_pass). "Blablabla" просто вырезается, так как не влияет на определение реального пути к файлам.
травматизм от перла, идеальным выражением которого являются pcre — да, весьма специфический, и глубокий. прорывается через любой синтаксис — хоть жабу, хоть питон. я даже знаком с чуваком, который способен писать перловые программы на лиспе. (так, по лёгкому флёру write-only, мы, люди 20го века, узнаём друг друга)
LISP сам по себе требует вывернутых мозгов. Я не говорю, что это плохо, наоборот, выверт похож на тот, что нужен для pcre, так что тут полная синергия :)
Скажу честно, я, несмотря на нехилый опыт применения RE, только недавно узнал про синтаксис (?'groupname'...). Обычно "матч-немачт", и все дела.
всю дорогу гениален! у меня к его творчеству отдельная сентиментальная привязка — немало неловких ситуаций в моей жизни связаны с моим неудержимым желанием поделиться гиковской радостью XKCD с цивилами.
pcre — жалкое кастрированое подобие настоящих перловых регулярок, в которые можно половину самого перла запихнуть (вторую нельзя только потому, что это вызовет сатану)
Угу, и из-за этого перловый код, написанный в "хорошем перловом стиле" относится к категории write only. Через полгода сам автор не всегда вспомнит, как оно работало :)
Ну почему же write-only, код от пейсателей, чересчур серьезно воспринявших perl cookbook и иже с ними, оченно приятно почитывать (темным зимним вечером, завернувшись в плед и укрывшись котом). Читаешь и ахаешь от авторской креативности, неожиданных находок и красивых хаков. На работе, понятно, подобное лучше обходить стороной, во избежание десятикратного перерасхода времени на расшифровку.
Нехай железное машыно их понимает. А наше дело их написать так чтобы оно их поняло (и желательно не превратно). Самим же нам их понимать глубоко необязательно.
У меня была хитрая задачка с конфигурацией nginx-а, и я её, в итоге, решил. Так, что URI два раза преобразуется налету по условиям, и многопоточность не пришлось в двух местах сооружать.
А такие задачки люблю, да. Я однажды шелл-скриптик написал который при деплое контейнера с nginx генерил для него из темплейта конфиг (в зависимости от выданных переменных) и он тоже с помощью регекса генерил регекс собсна для конфига. И на удивление оно работало. До сих пор не понимаю как. Оно ещё статический конфиг для эликстирного бэка генерило для полного веселья своим копипастным близнецом в другом контейнере.
Конкретно у PCRE невысокая, да. Есть более быстрые реализации.
Но мне в данной задачке не нужна была высокая производительность, нужно было в цикле обработки запросов nginx-а разобрать URI и перегруппировать его по определённым правилам динамически.
Жень, это там, где можно воткнуть grep/sed/awk. Поддерживал бы nginx в конфигах какой-нибудь процедурный язык, я бы на нём и написал. Уже смотрел в сторону модуля lua, пока не допёр, как сделать на регулярках.
Хм-ммм...
Date: 2024-06-17 12:55 pm (UTC)В смысле — постоянная потребность/необходимость/практика высказывать то, что хочется/нужно, не слишком заморачиваясь тюнингом вокабуляра?? ;))
С одобрением.
p.s. Ага, я в курсе, что такое "регулярки" (regexp`ы)... :)))
no subject
Date: 2024-06-17 02:00 pm (UTC)Ну, вроде того :)
Вообще, я сегодня открыл для себя новую сторону PCRE и победил nginx, заставив его делать одну очень нестандартную вещь. Вот прямо горд собой :)
no subject
Date: 2024-06-17 04:59 pm (UTC)Такие достижения очень духоподьемны.
no subject
Date: 2024-06-17 07:43 pm (UTC)Точно так :)
Хм-ммм...
Date: 2024-06-18 09:28 pm (UTC)А не будет ли столь любезен многоуважаемый джин приоткрыть завесу тайны над своей ачивкой? :)
Что там такого интересного-нестандартного произошло?
А то я сам не чужд прекрасного и тоже в данный момент домогаюсь от nginx`a не самого распространённого — а именно проброса через него (в роли реверс-прокси) https`a до внутреннего RDG.
Ну вот надо мне! ;)
"Прежде чем писАть, буду читать комментарии"(с) :))
Уже увидал в этой "перловке" ниже по бороде комментариев — разбор nginx`ом URI.
Ну ОК, богоугодное занятие. :)
С интересом.
Re: Хм-ммм...
Date: 2024-06-18 09:51 pm (UTC)При этом, источник файлов приходит в виде структурированного архива с совсем другой иерархией (например, files/png/1234/1234567-89012.png), а если файла нет на месте, то его нужно запросить у внешнего сервера, находящегося не под моим контролем, по URI исходного вида, но сохранить в ту же иерархию, что и остальные файлы.
В итоге, конфиг nginx-а для обработки запроса выглядит так:
Логика обработки: Путь к файлу из URI трансформируется в корректный при получении запроса (тут работает многопоточность nginx-а), а если файла нет, то исходный URI и реальный путь передаются для скачивания и сохранения процессу, обслуживающему API-запросы (см. upstream и proxy_pass). "Blablabla" просто вырезается, так как не влияет на определение реального пути к файлам.
no subject
Date: 2024-06-17 02:13 pm (UTC)прорывается через любой синтаксис — хоть жабу, хоть питон. я даже знаком с чуваком, который способен писать перловые программы на лиспе.
(так, по лёгкому флёру write-only, мы, люди 20го века, узнаём друг друга)
no subject
Date: 2024-06-17 04:22 pm (UTC)LISP сам по себе требует вывернутых мозгов. Я не говорю, что это плохо, наоборот, выверт похож на тот, что нужен для pcre, так что тут полная синергия :)
Скажу честно, я, несмотря на нехилый опыт применения RE, только недавно узнал про синтаксис (?'groupname'...). Обычно "матч-немачт", и все дела.
no subject
Date: 2024-06-17 04:43 pm (UTC)https://xkcd.com/224/
no subject
Date: 2024-06-17 07:42 pm (UTC)Этот стрип висел у меня над рабочим столом с 2012 года :)
Автор XKCD временами гениален.
no subject
Date: 2024-06-17 08:42 pm (UTC)у меня к его творчеству отдельная сентиментальная привязка — немало неловких ситуаций в моей жизни связаны с моим неудержимым желанием поделиться гиковской радостью XKCD с цивилами.
no subject
Date: 2024-06-18 10:11 am (UTC)Из любимого — https://xkcd.com/673/
:)no subject
Date: 2024-06-17 10:39 pm (UTC)no subject
Date: 2024-06-18 07:50 am (UTC)Угу, и из-за этого перловый код, написанный в "хорошем перловом стиле" относится к категории write only. Через полгода сам автор не всегда вспомнит, как оно работало :)
no subject
Date: 2024-06-18 12:34 pm (UTC)no subject
Date: 2024-06-18 12:48 pm (UTC)У меня есть печальный опыт восстановления алгоритма по такому перловому коду с оригинальными находками. Травма на полжизни :)
no subject
Date: 2024-06-17 03:56 pm (UTC)regex101 dot com.
Нехай железное машыно их понимает.
А наше дело их написать так чтобы оно их поняло (и желательно не превратно).
Самим же нам их понимать глубоко необязательно.
no subject
Date: 2024-06-17 04:14 pm (UTC)Ну... надо ж понимать, что ты написал :)))
У меня была хитрая задачка с конфигурацией nginx-а, и я её, в итоге, решил. Так, что URI два раза преобразуется налету по условиям, и многопоточность не пришлось в двух местах сооружать.
no subject
Date: 2024-06-17 05:37 pm (UTC)Ну зачем понимать... Главное чтоб оно работало ))
А такие задачки люблю, да.
Я однажды шелл-скриптик написал который при деплое контейнера с nginx генерил для него из темплейта конфиг (в зависимости от выданных переменных) и он тоже с помощью регекса генерил регекс собсна для конфига. И на удивление оно работало. До сих пор не понимаю как.
Оно ещё статический конфиг для эликстирного бэка генерило для полного веселья своим копипастным близнецом в другом контейнере.
no subject
Date: 2024-06-17 07:07 pm (UTC)Я воздерживаюсь от них пока возможно. А так-то пипл строку по пробелам делит ими...
no subject
Date: 2024-06-17 07:10 pm (UTC)Там вообще ничего сложного
no subject
Date: 2024-06-17 07:41 pm (UTC)Там есть некоторое количество фишек, до которых сразу не допрёшь.
Когда знаешь — "ничего сложного", но ты уже вышел на новый уровень ;)
Ну и синтаксис не так чтобы очень человекочитаемый.
no subject
Date: 2024-06-17 08:03 pm (UTC)У них производительность ниже плинтуса. А в тяжёлом случае ещё и варьируется сильно.
no subject
Date: 2024-06-17 08:31 pm (UTC)Конкретно у PCRE невысокая, да. Есть более быстрые реализации.
Но мне в данной задачке не нужна была высокая производительность, нужно было в цикле обработки запросов nginx-а разобрать URI и перегруппировать его по определённым правилам динамически.
no subject
Date: 2024-06-18 06:28 am (UTC)Потому и "пока можно". Так-то grep/sed/awk/vim - там без них никуда.
no subject
Date: 2024-06-18 07:52 am (UTC)Жень, это там, где можно воткнуть grep/sed/awk. Поддерживал бы nginx в конфигах какой-нибудь процедурный язык, я бы на нём и написал. Уже смотрел в сторону модуля lua, пока не допёр, как сделать на регулярках.
no subject
Date: 2024-06-18 07:56 am (UTC)ну, nginx — он такой, да.
тут думаю не свалить ли с него на лайти для домашних нужд…
no subject
Date: 2024-06-17 08:01 pm (UTC)При чём тут "сложность"?
no subject
Date: 2024-06-17 08:03 pm (UTC)Просто лень? Все ясно
no subject
Date: 2024-06-17 10:16 pm (UTC)no subject
Date: 2024-06-18 07:53 am (UTC)Ну... Я вот радуюсь, что часть магии по имени grouping осилил :)