На конференции nginx.conf 2015 объявлено (https://www.nginx.com/blog/launching-nginscript-and-looking-.../) об интеграции (http://hg.nginx.org/njs/rev/157dc59dae36) в кодовую базу http-сервера nginx предварительной версии модуля ngx_http_js_module с реализацией средств для выполнения скриптов, написанных на языке JavaScript. Скрипты на JavaScript могут использоваться в файле конфигурации для определения расширенной логики обработки запросов, формирования конфигурации, для динамической генерации ответа, модификации запроса/ответа или для быстрого создания заглушек с решением проблем в web-приложениях.
Скрипт запускается посредством директивы js_run (пример (http://hg.nginx.org/njs/file/11d4d66851ed/README?_ga=1.60079...)) и позволяет на стороне сервера выполнять многие низкоуровневые операции с запросом, без необходимости написания отдельного модуля на языке Си. Для выполнения скриптов используется собственный движок njs с реализацией виртуальной машины для урезанного подмножества JavaScript, упоминаемого как nginScript. На каждый запрос запускается отдельная виртуальная машина, что позволяет обойтись без сборщика мусора.JavaScript выбран как наиболее популярный язык программирования, хорошим претендентом являлся Lua, но он не так широко известен в среде web-разработчиков. Необходимость создания собственной виртуальной машины JavaScript обусловлена тем, что существующие движки оптимизированы для работы в браузере, в то время как для nginx необходима реализация, рассчитанная на серверное применение.
nginScript состоит из двух частей:
- Виртуальная машина и компилятор байткода с очень быстрым запуском и завершением работы. Блокирующие операции, такие как подзапросы HTTP, могут быть приостановлены и возобновлены по аналогии с другими блокирующими операциями в JavaScript;
- Синтаксис конфигурации, позволяющий встраивать блоки кода на JavaScript в файл конфигурации nginx. Подобные блоки выполняются по мере обработки HTTP-транзакций и позволяют для каждого запроса выполнять такие операции как корректировка внутренних параметров nginx, создание изощрённых условных конфигураций или изменение запроса/ответа.
Основные задачи, для которых может применяться nginScript:
- Блокирование угроз, связанных с безопасностью. При помощи nginScript можно динамически блокировать вредоносные запросы, эксплуатирующие уязвимости в web-приложениях или ограничивать интенсивность определённых запросов;
- Обеспечение более полного управления трафиком. Например, можно реализовать гибкие правила перенаправления трафика, использующие информацию из тела запроса и других источников;- Консолидация функции между приложениями через вынос дублирующейся функциональности из приложения;
- Быстрая разработка приложений с использованием типовых библиотек функций. Код на nginScript может быть вынесен в библиотеки и использован другими пользователями;
- Из возможных применений в будущем упоминаются такие возможности как исправления ошибок в web-приложениях, изменение бизнес-правил, персонализация работы пользователей и распределение запросов на несколько серверов с последующей агрегацией ответов от них.
URL: https://www.nginx.com/blog/launching-nginscript-and-looking-.../
Новость: http://www.opennet.dev/opennews/art.shtml?num=43022
> JavaScript выбран как наиболее популярный язык программирования, хорошим претендентом являлся Lua, но он не так широко известен в среде web-разработчиков.давайте будем стадом идти за ШирокоИзвестными (тм) технологиями. Лучше б луа допилили и в мейнстрим добавили
Они всё правильно сделали. Lua непривычен и известен только небольшой горстке разработчиков. JavaScript привычен при разработке для Web и обладает синтаксисом, который сразу понятен любому кто знаком с Си или Java.
Но вот пускать по VM на запрос... ну и что с ним будет при 10К запросов? Он долго сопротивлялся, но все-таки стал апачем, да? :)
если это что-то типа duktape то в принципе не хуже lua будет.
> duktapeК логопеду. Правильно «Duck Tape» или «Duct Tape», но никак не то, что ты написал. Может быть Duke Enegry Corporation (NYSE: DUK) и производит какие-то ленты, но я в этом сильно сомневаюсь.
>> duktape
> К логопеду. Правильно «Duck Tape» или «Duct Tape»к гуглу. duktape - это маленький и легкий встраиваемый JavaScript engine.
Если бы он стал апачем, он бы позволял грузить только нужные модули.
А что Apache лучше его? Ведь вроде бы Apache не умеет что-то там с картинками делать...
> А что Apache лучше его?Апач в его дефолтном состоянии - сильно лучше нжинкса ... жpeт ресурсы при своей работе. Потому что форк на каждый запрос - это очень ресурсоемко. Nginx на каждый запрос не форкается. И вообще - ничего ресурсоемкого не делает. Но, как видим, они работают над исправлением этого упущения.
Апач в дефолтном состоянии минимум лет пять, как не prefork врубает.
Толку. Статика большого размера особенно по медленным соединениям как блокировала воркеры, так и блокирует.
Неплохо бы понимать, что там имеют в виду под VM для начала. Может быть и довольно компактной штукой, в принципе, тем более, что у них урезанное подмножество JS и сборки мусора нет.
> JavaScript привычен при разработке для WebФронтенд-мартышки пишушие под nginx. Ога-Ога.
> обладает синтаксисом, который сразу понятен любому кто
Очень слабый аргумент. Полностью перекрывается нужностью поддержки своего велосипеда. Причем, заметь, это урезанный js и изучать его все равно придется.
> Фронтенд-мартышки пишушие под nginx. Ога-Ога.ну и пусть мартышки пишут под nginx и способствуют попуярности нормального сервера, поддерживая разработчиков.
> ну и пусть мартышки пишут под nginx и способствуют попуярности нормального сервера,
> поддерживая разработчиков.Единственная проблема: он при этом будет работать... ну... как апач с prefork, вот.
Ой, непривычен, как страшно то, веб мартышки не осилят выучить новый язык?
Реально луа учится за пол часа - http://tylerneylon.com/a/learn-lua/
Да, там есть тонкости типа обработки ошибок, метатаблички и прочее что осиливается чуть дольше, но это и не нужно особо в nginx
> Lua непривычен и известен только небольшой горстке разработчиков.Целый вечер надо разбираться в этом LUA! ДОКОЛЕ!
не знаю за остальных, но меня вполне поддержка lua давно устраивает;) Быть в мейнстриме как бы хорошо, но не критично.
это "некритично" кончается, когда автору левого модуля надоедает каждый раз его патчить для совместимости с новой версией.
А такова судьба всех не-мейнстрим модулей, и не только в nginx.
LUA нельзя допилить, ибо это не язык:- NULL нормального нет
- Массивов нет (эмуляция не в счет)
- ООП нет
- Большими объемами RAM оперировать не может
- Свои велосипеды там где у других языков все стандартизовано (например регулярные выражения LUA - это нечто)в итоге тот кто пишет на LUA: шаг влево/право должен брать в руки C
И так неспешно они напишут свою node.js
> И так неспешно они напишут свою node.jsНу так должен же чем-то заниматься nginx, inc? Чтобы ынтырпрайзные кастомеры бурно сpaли кирпичами от мегафич.
>> И так неспешно они напишут свою node.js
> Ну так должен же чем-то заниматься nginx, inc? Чтобы ынтырпрайзные кастомеры бурно
> сpaли кирпичами от мегафич.ынтырпрайз покупает решения от F5 и не парится. за предложения поставить что-то типа nginx увольняют и предают анафеме. Не ынтырпрайз это решение ни разу и не будет им
>что-то типа nginx увольняют и предают анафеме.Хоть и не люблю я эти срачи, но скажу: реально на nginx много бабла то не попилишь. Да и отдел страдает - чем меньше трат, тем меньше следующий бюджет. Вообщем там у них своя, параллельная вселенная...
>>что-то типа nginx увольняют и предают анафеме.
> Хоть и не люблю я эти срачи, но скажу: реально на nginx
> много бабла то не попилишь. Да и отдел страдает - чем
> меньше трат, тем меньше следующий бюджет. Вообщем там у них своя,
> параллельная вселенная...Нахватаю минусов, конечно. Ибо не праведное мнение тут. Но nginx не решение уровня энтерпрайз
Вполне праведное. Почти весь ынтерпрайз УГ, по понятным причинам.
> Вполне праведное. Почти весь ынтерпрайз УГ, по понятным причинам.тут можно бесконечно спорить. сам работал и в мелких компаниях и сам настраивал и апачи и nginx. поверьте, были бы у конторы деньги этот бы nginx там нахер бы не вперся. и я бы не советовал из ставить. энтерпрайзу нужно стабильное бизнес-решение с вполне вменяемой технической поддержкой. Ибо это деньги фирмы. Каждая минута простоя - это огромные бабки. а не деньги - зарплата сисадмину.
Дык нжынкс нынче охотно впаривает нжынкс плюс. С поддержкой, мониторингом, и вообще...
Вот и мальчики-интеграторы подтянулись, пиарить свои багеты. Вы такие смешные в этих галстучках.
А что же тогда "решение уровня интерпрайз"? IIS?
http://innetworktech.com/wp-content/uploads/2014/11/Magic-Qu...
> Но nginx не решение уровня энтерпрайзНа этот случай у них есть Nginx Plus! Вы сомневались в том что бояздэшники - латентные проприерасы? А как видите - очень зря! Поэтому если вы хотите опроприетареную хрень и за сотни денег - у них есть что вам предложить :)
> ынтырпрайз покупает решения от F5 и не парится.Наверное, именно поэтому у неткрафта из всей толпени хостеров - с F5 вообще аж целая 1 шарага.
Расскажи, расскажи. Я этот ынтырпрайд пишу, и коллеги рядом пишут. Зоопарка хватает самого разного - от апача и вебсферы до ноды. ну и нгинкс есть периодически. И определяется это процентов на 90 тем, что нравилось тем, кто начинал проект, или что было в моде в те времена. И прел как бакэнд для джавы есть, и наоборот, и вообще - всё, что угодно.Так что не надо баек про "суровый ээнтерпрайз, который покупает решения". Он суров, но тем, что избранное должно быть проверено в боях кем-то другим и что коней на переправе не меняет, даже если они давно подохли. Но в остальном - вариантов хватает.
А что, встроенного Перла уже не хватает?
> А что, встроенного Перла уже не хватает?Не энтерпрайзно. Инвесторы не поймут. Перл - это для бородатых хиппи.
>> А что, встроенного Перла уже не хватает?
> Не энтерпрайзно. Инвесторы не поймут. Перл - это для бородатых хиппи.перл - это, простите, нечто: стандарта нет, 150k+ строк кода (и это по осторожным оценкам), непонятных никому, с пачкой родовых проблем. Встраивать ЭТО в nginx смысла мало, что и показал имеющийся модуль (который, кстати, никто не выпилиывает).
> который, кстати, никто не выпилиываетВозможно потому что бородатый хиппи запилил сей чудесный сервер? ;)
вьюноша, С тоже придумали "бородатые хиппи" :)
> вьюноша, С тоже придумали "бородатые хиппи" :)Просто у си относительно компактное core языка и программы на нем вполне читаемы, если это не obfuscated C code contest. Си нравится системщикам, потому что позволяет почти все то же что и ассемблер, т.е. эффективные трюки, крутые оптимизации и вклинивание в самые глубокие аспекты системной механики (ну там свое собственное управление памятью можно например написать, или там записать байт 0x20 по адресу 0x100500).
А перл - что перл? Он системщикам на...
> вьюноша, С тоже придумали "бородатые хиппи" :)Просто у си относительно компактное core языка и программы на нем вполне читаемы, если это не obfuscated C code contest. Си нравится системщикам, потому что позволяет почти все то же что и ассемблер, т.е. эффективные трюки, крутые оптимизации и вклинивание в самые глубокие аспекты системной механики (ну там свое собственное управление памятью можно например написать, или там записать байт 0x20 по адресу 0x100500).
А перл - что перл? Он системщикам на...й не упал. А хипстеры-скриптокидозники предпочтут какой-нибудь JS. Потому что хипстеры != хиппи.
А что, Perl еще не умер?
> А что, Perl еще не умер?Punks not dead, просто они так пахнут...
> А что, Perl еще не умер?Тебя что, в гугле забанили, школото?
> А что, встроенного Перла уже не хватает?Встроенный перл умеет очень мало, в основном менять запросы, любая блокировка в этом перле приводит к залипанию всего воркера. Кроме того перлу чтобы не упасть внезапно и больно нужны нестандартные для некоторых дистров/ОС ключи сборки. Простотой и унификацией не пахнет. От njs отличается координально.
Больше же всего в каментах доставляет позиция, скажем так, активистов опен сорца, которые выступают за то, чтобы опен-сорц софта (njs) было меньше.
lua же давно поддерживается, зачем так много-то?
Видимо эффективные менеджеры, перебирающие ф-ции админов за доп.зарплату не осиливают луу))
> lua же давно поддерживается, зачем так много-то.Когда соберетесь с женой делать детей - вспомний свою аргумент и скажи жене:у соседей уже есть дети, зачем так много?
Ура, наконец-то можно будет серверный жс потыкать.
Вот вы с этим lua заладили. Кому будет мешать модуль, соберут из сорцов.
> На каждый запрос запускается отдельная виртуальная машинаИ все-таки он стал апачем... :)
Теперь можно устраивать олимпиады по nginx
> Теперь можно устраивать олимпиады по nginxДля опеннетчиков - Специальные.
Зачем GC (garbage collector)?Лучше ARC (Automatic Reference Counting)!
зачем вообще gc если время жизни 0.01с
Без JIT он сожрет все WCPU
Причем тут JIT, когда разговор про GC?
Очень лучше. Локальность - просто великолепная. А уж если многопоточность - то вообще класс, лочить рефкаунтер на каждый чих.Впрочем, к теме отношения это не имеет - здесь и правда аренам самое место (думаю, это и имели в виду под "запускается отдельная виртуальная машина").
> Впрочем, к теме отношения это не имеет - здесь и правда аренам
> самое место (думаю, это и имели в виду под "запускается отдельная
> виртуальная машина").Я тут как-то ткнулся perf'ом в одну штуку. И что я вижу?! Там 50% - lock waiting, 25% - memcpy. Прочее - крохи по мелочи.
Итого - проц занят почти в полку. Он делает 2 очень важные вещи: тyповэйтинг и тасовка байтиков туда-сюда. Даешь больше программ такого плана :)
Ну так чтобы такого не было надо ж матчасть знать, а нынче низкий уровень не в моде, все надеются, что компилятор или библиотека как-нибудь выкрутятся. А они, как водится, выкручиваются самым общим, безопасным и неэффективным образом.
hproxy наше все.
Откуда такая тяга везде пихать этот уродливый язык?
Брюки превращаются..., превращаются брюки,... в Apache Tomcat
Предпочитаем Jetty
Какой томкат? Совсем наркоман?
Осмелюсь предположить, что речь про какую-то не очень понятную связь между Java-сервлетами в Apache Tomcat и JavaScript в nginx.
это он пошутил так
just for fun
> just for funСудя по этому треду - наброс удался на славу :)
осталось и другие язычки набросить
могли бы уж совсем на JS переписать.. хотя, это уже где-то было.. ну тогда на Python.. не, - это тоже было.. ну на C то точно тоже было.. .. по ходу, не нужен этот nginx..
Ищу немертвый неблокирующий http-сервер на замену nginx
Если только на уровне ядра OSsystemd-httpd
kernel-http
lighttpd
> lighttpdТам кэширование ответов бэкэнда бестолковое. Если бэкэнд отгрузит гиг - скушается гиг памяти. Назад системе он уже не вернется никогда. А если бэкэнд сдуреет и отгрузит много данных - память вообще закончится.
а что случилось-то? новый опциональный модуль не понравился?
> а что случилось-то? новый опциональный модуль не понравился?Часть детей в треде еще не освоили чтение.
Вот что случилось.
nodejs express
> Ищу немертвый неблокирующий http-сервер на замену nginxА какие именно проблемы у вас не получается решить в nginx? Не удивлюсь, если какой-нибудь «nginx-light» в Debian будет идти без данного модуля.
mochiweb, cowboy, yaws, httpd
> mochiweb, cowboy, yaws, httpdА как же mathopd? Или там Их Ответ Чембер^W Апачу - Cherokee?
Apache. Но ты же не осилил.
ну да, htaccess запилить - так это не по дизайну, javascript вчепятать - за здрасьте)
>> htaccessНе надо эту пошлость в nginx тащить!
> Для выполнения скриптов используется собственный движок njs с реализацией виртуальной машины для урезанного подмножества языка JavaScript, упоминаемого как nginScriptВот учитесь детки как деньги пилить надо.
Есть lua - но же готовый для применения, ктож за него денег отвалит.
А тут пишем свою версию js т.к. v8 не оптимизирован для серверов - аргументировано разводим инвесторов на бабло.
Так говорите, как будто это что-то плохое.
Главное чтобы основной функционал не страдал, а там пусть хоть lisp прикручивают.
и brainfuck
> и brainfuckЛучше SUBLEQ.
> Так говорите, как будто это что-то плохое.
> Главное чтобы основной функционал не страдал, а там пусть хоть lisp прикручивают.DSL же!!1
Хотя в каждой шутке ...
Нормальный дсл заруливает и запедаливает 99% велосипедов на "ЯП общего назначения"
Ровно до того момента, когда оказывается, что:1) его не продумали до конца, и есть масса частных случаев, когда он делает совсем не то, что ждёшь, и эти частные случаи выскакивают в самый неудачный момент
2) документация неполна
3) ему постоянно надо кого-то учить.И вдруг выходит, что какой-нибудь паршивый питон или джаваскрипт с кастомным модулем, реализующим нужную бизнес-логику, лучше. Потому что его куча людей и так знает, документировать один модуль много проще, чем свой язык, а все грабли давно описаны, а кое-где - и исправлены за годы развития.
DSL - хорошая штука, если на его создание положить достаточно много усилий, но это уже ни разу не дёшево, не просто и сильно не факт, что окупится. Как с любыми кастомными решениями, в общем-то.
>> Для выполнения скриптов используется собственный движок njs с реализацией виртуальной машины для урезанного подмножества языка JavaScript, упоминаемого как nginScript
> Вот учитесь детки как деньги пилить надо.
> Есть lua - но же готовый для применения, ктож за него денег
> отвалит.
> А тут пишем свою версию js т.к. v8 не оптимизирован для серверов
> - аргументировано разводим инвесторов на бабло.Это ты как эксперт по распилу вещаешь или просто захотелось посчитать чужие деньги и обосрать кого-нибудь?
... плюс монстрификация всей страны.
Что вы на ребят наехали, кому-то это надо тот заплатил, ребята сделали, а то что код вам в подарок приехал это оказывается плохо...
А ещё можно заметить курсы nginScript, книги по nginScript и выдачу сертификатов nginScript
JS имеет место быть, но он становится вторым php, с его дурной славой говнокода. Фронтендщики полезли на сервер, пишут тонны говнокода, делают библиотеки из этого и заливают в npm. Потом бросают свой говнокод и кто-то остаётся даже без поддержки всего этого барахла.
когда планируется встроеный php?
Желтоватый заголовок. В официальном блоге пишут, что «nginScript is a robust implementation of much of JavaScript, including the parts most useful for configuring NGINX. Some less-used parts of JavaScript and some less relevant built-in objects are not supported». Так что там не JS, а всего лишь собственная ориентированная на конфигурирование реализация подмножества JS. А это совершенно иная песня.
> Желтоватый заголовок. В официальном блоге пишут, что «nginScript is a robust implementationВ документации и коде он назван "HTTP JavaScript module"
http://hg.nginx.org/njs/file/11d4d66851ed/README?_ga=1.60079...
и по возможностям он вполне себе обычный ранний JavaScript без привязанных к браузеру объектов.
nginx + node.js (io.js) >== profit > nginx + ngx_http_js_module
Тестов сравнения производительности по сравненю с lua-nginx нет?
>встроена поддержка JavaScriptПривет вирус :).
Лучше бы exec запилили ))), зачем javascript, ведь было бы гораздо проще асинхронно вызывать shell script сразу.
>ведь было бы гораздо проще асинхронно вызывать shell script сразу.Они уже записали отсутствие CGI себе в фичи -- теперь нельзя!!
Ну, благодаря этой новости заменили на трафик серв на входе, профитно получилось.
> профитно получилось.сэкономили на лицензиях, что ли?
Нет, траф для точки терминирования вебни оказался банально удобнее, удалось избавится от некоторых оверхедов с дублированием конфигурации и избавиться от возможных косяков с кешами.
Блобня у нас запрещена в таким местах если что.
Lua кусок хрени в которой еле еле появились Long-и в 5.3 парни вы серьезно? Давайте так либо если вам строки надо обрабатывать тут JS или нет пофиг, а если что-то писать там в конфигах собрались, то давайте досвидание...
> Lua кусок хрени в которой еле еле появились Long-и в 5.3Если уж на то пошлО, то в JS целочисленного типа и сейчас нет.