LINUX.ORG.RU
ФорумAdmin

Ставить ли nginx или наружу node?

 , ,


0

3

Нужно ли ставить поверх бэка nginx или голой жопой node express выставлять?

Давно надоело корявые конфиги правть, где тупо нет if/else. Да и вообще, для чего он? Ну модульки там всякие типа connlimit, но это и через iptables можно...что еще...ну логи...что еще может nginx что не может node/http/https модуль?

★★★★

Последнее исправление: gobot (всего исправлений: 3)

разумеется. твоя однопоточная нода не сможет в кучу коннектов, для этого нужен инженкс. у которого есть и евент и многопоток. да и статику и кэш и логи и ссл, короче долго объяснять, ставь он необходим. без него ниче работать не будет.

antech
()
Ответ на: комментарий от gobot

Не ставить nginx конечно легче, но речь шла про то, что nginx на сишечке сможет отдать больше запросов (на статике), чем экспресс на ноде. Да и терминировать ssl он будет эффективнее. Но если это твой личный хелловорлд, который непонятно выстрелит или нет, то можно не парится.

goingUp ★★★★★
()
Ответ на: комментарий от antech

А куча конектов это какая куча? Ну 50 картинок загрузить одновременно. Для этого есть keep-alive. Потом кеш браузера. В этом вообще проблем не вижу. А что еще, какие конекты? Вебсокет? Там 1000 хватит, но за это уже сокет отвечает, тут ограничение на уровне ос...

А ssl что? Можно подробнее? Что с ним не так?

gobot ★★★★
() автор топика
Ответ на: комментарий от goingUp

больше запросов (на статике)


Пока статика меньше всего заботит. Это миллионы запросов в сек наверное нужно иметь, чтобы за это переживать. Тут рыбка помельче намного

gobot ★★★★
() автор топика

Да и вообще, для чего он?

Для пхп и прочего, что самостоятельно не умеет в сложную логику. В ноде есть хттп-сервер либой/модулем, поэтому тут отдельный вебсервер снаружи не нужен.

anonymous
()
Ответ на: комментарий от goingUp

nginx на сишечке сможет отдать больше запросов (на статике), чем экспресс на ноде

Больше запросов/быстрее в контексте хттп(да и ноды тоже, хоть прикрытой сишечкой, хоть нет) - это рассуждения экспертов с дивана.

anonymous
()
Ответ на: комментарий от KivApple

Если только балансировка...но я пока до этого не дошел

А https то в чем плюс? Ну если только без перезапуска...но...слабый аргумент. Раз в 3 месяца даже и полезно перезапустить, так сказать дать просраться, очиститься, от памяти демон http

gobot ★★★★
() автор топика

Вероятно проще считать, что это про разграничение ответственности. Слова nginx и net.core.somaxconn - налево. Слова node и javascript - направо. Для разных людей и разных работ, так сказать.

Toxo2 ★★★★★
()
Ответ на: комментарий от antech

Да не, вера это другое. Я не сомневаюсь что сишка отдаст больше статики, но это критично для гугла может быть, но не в моем случае. Больше волнуют вопросы секурности, поддержки протоколов(ну хз,TLS 1.3, http 2.0 что там еще)

gobot ★★★★
() автор топика

я всегда ставлю поверх nginx, хотябы ради холявных сертификатов, и потом на node, или докер натравливаю, http2 упрощается, но его бы не использовал, 5 мес. назад одним запросом досили, отключение http2 помогло, хотя говорят nginx по фиксили

s-warus ★★★★
()
Ответ на: комментарий от gobot

для гугла это особенно критично и там даже nginx не тянет. вопросы секурности это к тем кто делал. никакая маркетологическая секурность не поможет если рукожоп

antech
()

Уже всё сказали - nginx гораздо быстрее и фичастее. Терминирование https, балансировка нагрузки, отдача статики, простейший WAF (типа ограничений по ip), редиректы на разные беки. Плюс удобный конфиг.

У меня nginx проксирует трафик и на бэк (fastapi), и на фронт (другой nginx с vuejs). На нем же авторизация, генерация сертификатов и терминирование https.

skyman ★★★★★
()
Ответ на: комментарий от gobot

вообще всмысле секурности мне нода нравиться намного больше. т.к код пишешь сам. и ничего кроме того что сам написал там нет. в откличии от готового продукта где нет уверености в «недокументированых» возможностях, а так в прямоте работы документированых. к тому же там километровые трактаты о том что и как, быстрее написать свое чем изучать чужое, а без полного понимания опять таки нет уверенности что все правильно сделал.

antech
()
Ответ на: комментарий от antech

в ноде есть воркеры, но это вариация на тему браузерных вебворкеров, те как бы треды, но через жопу, те можно говорить, что нода многопоточна, а можно и однопоточной называть, обв утверждения верны

rtxtxtrx ★★★
()
Ответ на: комментарий от firkax

О боже. Причем тут джаваскрипты? Nodejs, в частности его модуль HTTP\HTTPS написан на ЦЫ\ЦЫ++. Express это фреймворк поверх этого модуля. Да, он написан на javascript. В этом вся и гибкость (middleware, routes etc)

Очевидно

Не очевидно. Поясни

поддержкой чего угодно

Например? Что поддерживает nginx, чего не поддерживает Node\HTTP?

gobot ★★★★
() автор топика
Ответ на: комментарий от gobot

ну не хочешь, не надо, просто nginx это в первую очередь прокси, легко сделать виртуалные хосты, несколько доменов на одном ip, или разделение https://вася это одно, а https://вася/api это другое, много головной боли снимает.

s-warus ★★★★
()
Ответ на: комментарий от s-warus

nginx, хотябы ради холявных сертификатов

какая связь между nginx и letsencrypt? В том, что есть плагин certbot --nginx? Слабый аргумент...

и потом на node, или докер натравливаю

я это годами делал, больше по привычке. Сейчас не знаю, стоит ли это вся возня. Весомых аргументов тут так никто и не сказал... Ну да ладно, поставлю голой жопой node\http, а там видно будет

gobot ★★★★
() автор топика
  • Поддержка HTTP2/3, превращение их в HTTP1 внутри контура
  • HTTPS/TLS
  • Накопление запроса от медленных клиентов, не уверен насколько это актуально в ноде, но в синхронных обработчиках это обязательно
  • Хоть какой-то экран от взлома голой жопы всякими крафтами заголовков, переполнениями буферов и таймаутами. Никакой фреймворк так хорошо не тестировался на эту тему как нгинкс
  • Быстрее раздаётся статика, порой даже средствами ядра, через sendfile
neumond ★★
()
Ответ на: комментарий от neumond

Поддержка HTTP2

В ноде тоже есть хотя мне и не надо пока...

HTTPS/TLS

И? Что TLS? Что HTTPS?

Хоть какой-то экран от взлома голой жопы всякими крафтами заголовков, переполнениями буферов и таймаутами

Можно пример?

Никакой фреймворк

Причем тут фреймворк?

Быстрее раздаётся статика

ну статику да, можно nginx заюзать, но не критично в моем случае, поэтому слабый аргумент

gobot ★★★★
() автор топика
Ответ на: комментарий от gobot

Если в ноде весь этот конструктор есть, то вперёд и с песней, счастливого секса. Обычно в проектах ещё есть разные адреса с разным назначением, не только бэк на ноде, собственно nginx используется ещё как L7 роутер.

neumond ★★
()
Ответ на: комментарий от gobot

Пока статика меньше всего заботит. Это миллионы запросов в сек наверное нужно иметь,

Вы прикинте на вскидку. Какая у вас скорость соединения, допустим у провайдера заявлено 100Mb/sec. Это не значит, что у вас есть чистый 100Mb/sec, TCP/IP сеть должна быть на треть свободна, чтоб небыло коллизий. Значит у вас уже 75Mb/sec.

Двигаемся дальше, у вас HTTP сервер, значи еще примерно 4kb у вас будет в метаданных. Для кгурлого счета 105kb картинка.

Специально расчехляяю Nushell.

75Mb / 105kb
714.2857142857143

715 картинок по 100Kb в секунду.

Теперь давайте посмотрим сколько пользователей отметлось в данной теме.

http get https://www.linux.org.ru/forum/admin/17898027 | query web --query 'div.sign' | each { |e| get 1} | uniq
╭────┬───────────╮
│  0 │ gobot     │
│  1 │ gagarin0  │
│  2 │ goingUp   │
│  3 │ antech    │
│  4 │ ya-betmen │
│  5 │           │
│  6 │ KivApple  │
│  7 │ rtxtxtrx  │
│  8 │ Toxo2     │
│  9 │ firkax    │
│ 10 │ s-warus   │
│ 11 │ zolden    │
│ 12 │ skyman    │
│ 13 │ einhander │
│ 14 │ neumond   │
│ 15 │ Obezyan   │
│ 16 │ ivanich10 │
╰────┴───────────╯

15 пользователей.

715/15 = 47 подобный тем в секунду и всё. Ни каких миллионов запросов.

lbvf50txt
()
Ответ на: комментарий от lbvf50txt

100Mb/sec. Это не значит, что у вас есть чистый 100Mb/sec

Если не значит - провайдер идет лесом за вранье. Даже если не гарантированная, то в 99% случаев полоса должна быть держаться на заявленной

TCP/IP сеть должна быть на треть свободна, чтоб небыло коллизий

С чего бы это? Каких коллизий?

715 картинок по 100Kb в секунду.

даже считать скучно. Картинки кешируются хорошо браузером. Все от контента зависит, если сайт какой-то новостной\блог где раз в час публикуюися фотки, то да, тут можно посчитать, а тут на форуме аватары закешировал 1 раз на 200 лет и все

Ради интереса глянул
www.linux.org.ru/photos/18654:1382745660.jpg

Cache-Control: max-age=315360000

gobot ★★★★
() автор топика
Ответ на: комментарий от gobot

TCP/IP сеть должна быть на треть свободна, чтоб небыло коллизий

С чего бы это? Каких коллизий?

На канальном уровне (Ethernet) сеть должна половину или две трети времени быть свободной, чтоб небыло коллизий между картами, когда они сразу начнут что-то передавать.

Интересный вопрос, так ли это сейчас. Все ли решает маршрутизатор, знающего бы кого-то в тред, чтоб он разрулил.

даже считать скучно. Картинки кешируются хорошо браузером

Это первое оценочное суждение. Со всеми «но и если» легко считается, что забить 100Mb/sec не так уж много запросов в секунду и надо.

lbvf50txt
()
Ответ на: комментарий от gobot

С чего бы это? Каких коллизий?

В Ethernet среде все же карты говорят в одно простраство, и уже карта которой предназначается дейтаграмма её забирает.

Вот тут интересный вопрос как работает маршрутизатор, научился ли он уже лично карте отправлять сообщение. Особенно я в эту тему уже давно не вдавался, но на всякий случай при первых прикидках беру 2/3 от заявленной скорости.

lbvf50txt
()
Ответ на: комментарий от gobot

Ну-ну. И аргументов 0. Сказал не-идиот

Обоссывать джаваскриптизеров фактами все равно бить детей. Вы же для простейших вещей тащите в ноду модули, а потом получаете тупейшие инциденты. Что ещё лежит в папке с модулями неизвестно никому. И оставлять это все мехом наружу могут только вчерашние фронтендщики.

Про геморрой с получением, например virtual hosts на одном порту, проблемы школо-ддоса однопоточной ноды без прокси и балансера это уже притча во языцах.

Obezyan
()
Ответ на: комментарий от lbvf50txt

На канальном уровне (Ethernet) сеть должна половину или две трети времени быть свободной

Может вообще сервер выключить, пусть отдыхает, чего зря шуметь?

gobot ★★★★
() автор топика