Korzystanie Z Węzła.js only vs. using Node.js z Apache/Nginx

W jakich przypadkach należy preferować użycie Node.js tylko jako serwer w realnym wdrożeniu?

Gdy ktoś nie chce używać Node.tylko js, co gra lepiej z Node.js? Apache czy Nginx?

 175
Author: 7cows, 2013-05-27

4 answers

Istnieje kilka dobrych powodów, aby umieścić inny serwer przed węzłem.js:

  • nie musimy się martwić o przywileje / setuid dla węzła.proces js. Tylko root może łączyć się z portem 80. Jeśli pozwolisz nginx / Apache martwić się o rozpoczęcie jako root, powiązanie z portem 80, a następnie rezygnację z uprawnień roota, oznacza to, że Twoja aplikacja węzła nie musi się o to martwić.
  • obsługa plików statycznych, takich jak obrazy, css, js i html. Node może być mniej wydajny w porównaniu z używaniem odpowiedni statyczny serwer plików (węzeł może być również szybszy w wybranych scenariuszach, ale jest to mało prawdopodobne). Oprócz plików obsługujących bardziej wydajnie, nie będziesz musiał martwić się o obsługę etagów lub nagłówków kontroli pamięci podręcznej w sposób, w jaki byś to zrobił, gdybyś serwował rzeczy z węzła. Niektóre frameworki mogą obsłużyć to za ciebie, ale chciałbyś mieć pewność. Niezależnie od tego, nadal prawdopodobnie wolniej.
  • jak wspomniał Matt Sergeant w swojej odpowiedzi, można łatwiej wyświetlać znaczące strony błędów lub wróć do witryny statycznej, jeśli usługa węzła ulegnie awarii. W przeciwnym razie użytkownicy mogą po prostu uzyskać połączenie czasowe.
  • Uruchomienie innego serwera www przed węzłem może pomóc złagodzić luki w zabezpieczeniach i ataki DoS przeciwko węzłowi. Na przykład w świecie rzeczywistym, CVE-2013-4450 jest zapobiegany przez uruchomienie czegoś takiego jak Nginx przed węzłem.

Zastrzeżę drugi punkt mówiąc, że prawdopodobnie powinieneś obsługiwać swoje pliki statyczne przez CDN, lub zza serwer buforujący jak Varnish. Jeśli to robisz, nie ma znaczenia, czy źródłem jest Node, Nginx lub Apache.

Zastrzeżenie dotyczące nginx w szczególności: jeśli używasz websockets, upewnij się, że używasz najnowszej wersji nginx (>= 1.3.13), ponieważ dopiero dodano wsparcie dla aktualizacji połączenia do korzystania z websockets.

 166
Author: pauljz,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-10-26 21:01:59

Aby dodać jeszcze jeden powód do odpowiedzi pauljza, używam serwera front-end, aby mógł obsługiwać strony błędów 502, gdy ponownie uruchamiam serwer backendowy lub z jakiegoś powodu się zawiesza. Dzięki temu użytkownicy nigdy nie otrzymają błędu dotyczącego niemożności nawiązania połączenia.

 54
Author: Matt Sergeant,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-05-27 16:05:30

Uważam, że używanie Node do obsługi plików statycznych jest w porządku w każdych okolicznościach , o ile wiesz, co robisz . Z pewnością nowym paradygmatem jest używanie serwera aplikacji do serwowania plików statycznych jako tak wielu(każdy?) konkurencyjne technologie (PHP, Ruby, Python itp.) wymagają serwera www, takiego jak HTTPD lub Nginx przed serwerami aplikacji.

Każdy obiektywny powód, dla którego kiedykolwiek czytałem przeciwko serwowaniu plików statycznych za pomocą Node, obraca się wokół idei używania tego, co wiesz najlepiej lub używając tego, co jest postrzegane jako lepiej Przetestowane / bardziej stabilne. Są to bardzo ważne powody praktycznie mówiąc, ale mają niewiele czysto technicznego znaczenia.

O ile nie znajdziesz funkcji, która jest możliwa z klasycznym serwerem WWW, która nie jest możliwa z węzłem (i wątpię, że będziesz), wybierz to, co znasz najlepiej lub z czym wolisz pracować, ponieważ oba podejścia są w porządku.

Co do Nginx vs Apache-będą "grać" z Node ' em tak samo. Należy je porównać bez / align = "left" /

 24
Author: ,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-06-05 21:03:24

Wierzę w Fakty i Benchmarki Według pauljz nginx jest lepszy na serwowanie plików statycznych, obawiam się, że jego na pewno nie prawda, że jest całkowicie przeciwieństwem tego, co powiedział, sprawdź link bechmarks .Jak node js skalował się 2x razy lepiej niż nginx (4,250 trans/s vs 2,118 trans/s) - szczególnie na wyższych poziomach współbieżności. Sprawdź również średni czas odpowiedzi( 0.14 s vs 0.23 s), najdłuższy czas transakcji (1.10 s vs 13.95 s) i numery dostępności transakcji węzeł.przysługa js. Więcej informacji można znaleźć pod linkiem http://centminmod.com/siegebenchmarks/2013/020313/

 7
Author: Yousaf,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-10-16 22:39:12