Nginx działa jako serwer front-end, który w tym przypadku zastępuje żądania do serwera node.js. Dlatego musisz skonfigurować plik konfiguracyjny nginx dla węzła.
Oto, co zrobiłem w moim polu Ubuntu:
Utwórz plik yourdomain.com
w /etc/nginx/sites-available/
:
vim /etc/nginx/sites-available/yourdomain.com
Powinieneś w nim mieć coś takiego:
# the IP(s) on which your node server is running. I chose port 3000.
upstream app_yourdomain {
server 127.0.0.1:3000;
keepalive 8;
}
# the nginx server instance
server {
listen 80;
listen [::]:80;
server_name yourdomain.com www.yourdomain.com;
access_log /var/log/nginx/yourdomain.com.log;
# pass the request to the node.js server with the correct headers
# and much more can be added, see nginx config options
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_set_header X-NginX-Proxy true;
proxy_pass http://app_yourdomain/;
proxy_redirect off;
}
}
Jeśli chcesz, aby nginx (> = 1.3.13) obsługiwał również żądania websocket, dodaj następujące wiersze w location /
sekcji:
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
Po skonfigurowaniu musisz włączyć witrynę zdefiniowaną w pliku konfiguracyjnym powyżej:
cd /etc/nginx/sites-enabled/
ln -s /etc/nginx/sites-available/yourdomain.com yourdomain.com
Utwórz aplikację serwera węzła pod /var/www/yourdomain/app.js
i uruchom jąlocalhost:3000
var http = require('http');
http.createServer(function (req, res) {
res.writeHead(200, {'Content-Type': 'text/plain'});
res.end('Hello World\n');
}).listen(3000, "127.0.0.1");
console.log('Server running at http://127.0.0.1:3000/');
Test na błędy składniowe:
nginx -t
Uruchom ponownie nginx:
sudo /etc/init.d/nginx restart
Na koniec uruchom serwer węzła:
cd /var/www/yourdomain/ && node app.js
Teraz powinieneś zobaczyć „Hello World” na twojadomena.com
Ostatnia uwaga dotycząca uruchomienia serwera węzłów: powinieneś użyć jakiegoś systemu monitorowania demona węzła. Jest niesamowity samouczek na temat węzła z upstartem i monitorem .
location / { proxy_pass http://127.0.0.1:3000; }
? Dlaczego potrzebujesz całegoupstream
bitu konfiguracji?sites-enabled
isites-available
katalogi wewnątrz/etc/nginx
. Jeśli twoja wersja przyszła bez tych dwóch katalogów, prawdopodobnieconf.d
zamiast tego ma jeden katalog. W takim przypadku wykonanie tych instrukcji nie przyniesie żadnego efektu, chyba że zmodyfikujeszinclude
instrukcję w pliku,nginx.conf
aby wskazywałasites-enabled
zamiast domyślnejconf.d
. Mam nadzieję, że to ma sens. Powinno to stać się oczywiste, gdy zobaczysz wspomnianeinclude
oświadczenie w środkunginx.conf
.Możesz także skonfigurować wiele domen za pomocą nginx, przekazując je do wielu procesów node.js.
Na przykład, aby to osiągnąć:
Porty te (4000 i 5000) powinny być używane do nasłuchiwania żądań aplikacji w kodzie aplikacji.
/ etc / nginx / sites-enabled / domain1
W / etc / nginx / sites-enabled / domain2
źródło
http://example.com
automatycznie dostaje się302
dohttp://www.example.com
. Dlaczego?proxy_set_header Host $host
aby uniknąć przekierowania HTTP 302.Możesz również mieć różne adresy URL dla aplikacji w konfiguracji jednego serwera:
W / etc / nginx / sites-enabled / yourdomain :
Uruchom ponownie nginx:
Uruchamianie aplikacji.
węzeł app1.js
węzeł app2.js
źródło
Niezależne od proxy aplikacje Node Express za pośrednictwem Nginx.
Dzięki temu nowe aplikacje mogą być łatwo montowane, a także mogę uruchamiać inne rzeczy na tym samym serwerze w różnych lokalizacjach.
Oto więcej szczegółów na temat mojej konfiguracji z przykładem konfiguracji Nginx:
Od: http://skovalyov.blogspot.dk/2012/07/deploy-multiple-node-applications-on.html
źródło
Node.js z konfiguracją Nginx.
dodaj następującą konfigurację, aby Nginx działał jako proxy przekierowujący na ruch portu 3000 z serwera, gdy pochodzimy z „subdomena.twoja_domena.com”
źródło
odpowiadając na twoje pytanie 2:
Użyłbym opcji
b
po prostu dlatego, że zużywa ona znacznie mniej zasobów. z opcją „a”, każdy klient powoduje, że serwer zużywa dużo pamięci, ładując wszystkie potrzebne pliki (nawet jeśli lubię php, jest to jeden z problemów). Dzięki opcji „b” możesz załadować swoje biblioteki (kod wielokrotnego użytku) i udostępnić je wszystkim żądaniom klientów.Ale pamiętaj, że jeśli masz wiele rdzeni, powinieneś dostosować plik node.js, aby korzystać z nich wszystkich.
źródło
Zrobiłem repozytorium w Github, które można sklonować, vagrant-node-nginx -ilerplate
w zasadzie aplikacja node.js
/var/www/nodeapp
toa konfiguracja nginx
/etc/nginx/sites-available/
toźródło
Możesz także użyć node.js do wygenerowania plików statycznych do katalogu obsługiwanego przez nginx. Oczywiście niektóre dynamiczne części witryny mogą być obsługiwane przez węzeł, a niektóre przez nginx (statyczny).
Posiadanie niektórych z nich przez Nginx zwiększa wydajność.
źródło
Możemy łatwo skonfigurować aplikację Nodejs firmy Nginx działającą jako odwrotne proxy.
Poniższa konfiguracja zakłada, że aplikacja NodeJS działa na 127.0.0.1:8080,
w powyższej konfiguracji Twoja aplikacja Nodejs,
HTTP_HOST
nagłówek, w którym możesz zastosować logikę specyficzną dla domeny, aby obsłużyć odpowiedź. „Twoja aplikacja musi być zarządzana przez kierownika procesu, takiego jak pm2 lub przełożonego, w celu obsługi sytuacji / ponownego wykorzystywania gniazd lub zasobów itp.
Skonfiguruj usługę raportowania błędów w celu uzyskania błędów produkcyjnych, takich jak wartownik lub pasek przewijania
UWAGA: możesz skonfigurować logikę do obsługi tras żądań specyficznych dla domeny, utworzyć oprogramowanie pośrednie dla aplikacji expressjs
źródło
Nginx może działać jako odwrotny serwer proxy, który działa podobnie jak kierownik projektu. Gdy otrzyma żądanie, analizuje je i przekazuje żądanie do wyższego szczebla (członkowie projektu) lub sam się obsługuje. Nginx ma dwa sposoby obsługi żądania w zależności od jego konfiguracji.
przekaż żądanie do innego serwera
}
Serwer żądania
przekaż żądanie do innego serwera
Po uruchomieniu serwera node.js na porcie 8000 nginx przekaże żądanie do node.js. Napisz logikę node.js i obsłuż żądanie. To tyle, że serwer Nodejs działa za serwerem Nginx.
Jeśli chcesz uruchomić inne usługi niż nodejs, po prostu uruchom inną usługę, taką jak Django, flask, php na różnych portach i skonfiguruj ją w nginx.
źródło
Możesz uruchomić nodejs za pomocą pm2, jeśli chcesz zarządzać każdym środkiem mikrousług i go uruchomić. Węzeł będzie działał w porcie po prostu skonfiguruj ten port w nginx (/etc/nginx/sites-enabled/domain.com)
Sprawdź, czy host lokalny działa, czy nie, używając polecenia ping.
I
To jest najlepsze i tak jak powiedziałeś łatwiej
źródło
Najlepszą i prostszą konfiguracją w Nginx i Nodejs jest użycie Nginx jako modułu równoważenia obciążenia HTTP i TCP z włączonym protokołem proxy_protocol. W tym kontekście Nginx będzie mógł proxy przychodzących żądań do nodejs, a także zakończyć połączenia SSL z serwerami serwerowymi Nginx, a nie z samym serwerem proxy. (SSL-PassThrough)
Moim zdaniem nie ma sensu podawać przykładów innych niż SSL, ponieważ wszystkie aplikacje internetowe (lub powinny) korzystać z bezpiecznych środowisk.
Przykładowa konfiguracja serwera proxy w /etc/nginx/nginx.conf
Teraz zajmiemy się serwerem zaplecza. /etc/nginx/nginx.conf :
Teraz skonfigurujmy wirtualnego hosta za pomocą tej konfiguracji SSL i proxy_protocol na /etc/nginx/sites-available/example.com-https.conf :
I na koniec przykład 2 serwerów nodejs : Pierwszy serwer:
Drugi serwer:
Teraz wszystko powinno działać idealnie i być zrównoważone.
Jakiś czas temu napisałem o tym, jak skonfigurować Nginx jako moduł równoważenia obciążenia TCP w Docker . Sprawdź, czy korzystasz z Dockera.
źródło