Как работает веб-сервер и node js в связке? Зачем нужен Nginx?
================================================================

 Привет! Я только начал погружаться в мир бэкэнда, и иногда не совсем понимаю что и зачем нужно.   

В общем, я решил сделать простую доску объявлений, у меня имеется два сервера на Node.Js, один отдает статику, другой - api который формирует запросы к базе. Но я не давно узнал о такой штуке как Nginx (ну и вообще о других веб-серверах). И теперь у меня возникла дилемма, я вообще запутался, и не понимаю как правильно, и что для чего нужно.   

Как я понял, Nginx и Node Js могут работать в связке, но тогда кто за что отвечает, если маршрутизация выполняется с помощью React, все необходимые файлы отдает Node, запросы так же делает Node, для чего тогда вообще нужен веб-сервер на Nginx, и какую задачу он будет выполнять?  

 Зачем вообще нужен Nginx, Apache и т.п. если всю серверную часть можно организовать на node, или на любом другом языке и фреймворке? 

 Самое простое - nginx отдаёт статику. На больших объёмах делать это через Ноду неэффективно.  

Посложнее - nginx позволяет управлять ходом запроса. Например, редиректить на https.  

Ещё сложнее - можно настроить nginx, чтобы он умно балансировал запросы между несколькими бэкендами и автоматом блокировал слишком частые попытки подключения.  

  

Nginx очень хорошо в промышленных масштабах делает определённую часть работы, связанной с http-запросом, поэтому ему эту часть работы и делегируют. 

 Самый простой ответ - зачем заново изобретать велосипед?  

По факту, nodejs тоже не нужен, ведь можно все сделать на assembler 

 Я nginx юзаю по той причине, что на одном сервере крутятся несколько приложений, с его помощью удобно объединить их все "под одной крышей", не арендуя для каждого из них отдельный инстанс. В ситуации с дефицитом IPv4-адресов это как-то расточительно, а так - каждое приложение слушает отдельный порт, nginx слушает 80 и 443 и проксирует все запросы по имени домена на них.  

Да и гораздо проще всю работу по обеспечению общения клиентов с сервером скинуть на nginx - не надо в каждом приложении отдельно делать логирование запросов, работу по получению и продлению SSL-сертификатов, можно сосредоточиться на решении конкретной проблемы.