Cum să configurați Nginx ca proxy invers pentru aplicația Nodejs


Nodejs este un cadru JavaScript cu sursă deschisă gratuit, ușor, scalabil și eficient, construit pe motorul JavaScript V8 al Chrome și utilizează un model I/O care nu blochează, bazat pe evenimente. Nodejs este acum peste tot și a devenit atât de popular pentru dezvoltarea de software de la site-uri web, aplicații web la aplicații de rețea și multe altele.

Nginx este un server HTTP de înaltă performanță, cu sursă deschisă, echilibrator de încărcare și software de proxy invers. Are un limbaj de configurare simplu, ceea ce face ușor de configurat. În acest articol, vom arăta cum să configurați Nginx ca proxy invers pentru aplicațiile Nodejs.

Notă: dacă sistemul dvs. rulează deja cu Nodejs și NPM, iar aplicația rulează pe o un anumit port, mergeți direct la Pasul 4.

Pasul 1: Instalarea Nodejs și NPM în Linux

Cea mai recentă versiune a Node.js și NPM este disponibilă pentru a fi instalată din depozitul oficial de distribuții binare NodeSource Enterprise Linux, Fedora, Debian și Ubuntu, care este întreținut de site-ul web Nodejs și va trebui să îl adăugați la sistemul dumneavoastră pentru a putea instala cele mai recente pachete Nodejs și NPM, așa cum se arată.

Pe Debian/Ubuntu

---------- Install Node.js v11.x ---------- 
$ curl -sL https://deb.nodesource.com/setup_11.x | sudo -E bash -
$ sudo apt-get install -y nodejs

---------- Install Node.js v10.x ----------
$ curl -sL https://deb.nodesource.com/setup_10.x | sudo -E bash -
$ sudo apt-get install -y nodejs

Pe CentOS/RHEL și Fedora

---------- Install Node.js v11.x ---------- 
$ curl -sL https://rpm.nodesource.com/setup_11.x | bash -

---------- Install Node.js v10.x ----------
$ curl -sL https://rpm.nodesource.com/setup_10.x | bash -

Pasul 2: Crearea unei aplicații Nodejs

În scop demonstrativ, vom crea o aplicație exemplu numită „sysmon”, care va rula pe portul 5000, așa cum se arată.

$ sudo mkdir -p /var/www/html/sysmon
$ sudo vim /var/www/html/sysmon/server.js

Copiați și inserați următorul cod în fișierul server.js (înlocuiți 192.168.43.31 cu IP-ul serverului dvs.).

const http = require('http');

const hostname = '192.168.43.31';
const port = 5000;

const server = http.createServer((req, res) => {
	res.statusCode = 200;
  	res.setHeader('Content-Type', 'text/plain');
  	res.end('Sysmon App is Up and Running!\n');
});

server.listen(port, hostname, () => {
  	console.log(`Server running at http://${hostname}:${port}/`);
});

Salvați fișierul și ieșiți.

Acum porniți aplicația nod folosind următoarea comandă (apăsați Ctrl+x pentru a o termina).

$ sudo node /var/www/html/sysmon/server.js
OR
$ sudo node /var/www/html/sysmon/server.js &   #start it in the background to free up your terminal

Acum deschideți un browser și accesați aplicația dvs. la adresa URL http://198.168.43.31:5000.

Pasul 3: Instalați Nginx Reverse Proxy în Linux

Vom instala cea mai recentă versiune a Nginx din depozitul oficial, așa cum se arată mai jos.

Pe Debian/Ubuntu

Creați un fișier numit /etc/apt/sources.list.d/nginx.list și adăugați-i următoarele rânduri.

deb http://nginx.org/packages/ubuntu/ bionic nginx
deb-src http://nginx.org/packages/ubuntu/  bionic nginx

Apoi, adăugați cheia de semnare a depozitului, actualizați indexul pachetului de sistem și instalați pachetul nginx după cum urmează.

$ wget --quiet http://nginx.org/keys/nginx_signing.key && sudo apt-key add nginx_signing.key
$ sudo apt update
$ sudo apt install nginx

Pe CentOS/RHEL și Fedora

Creați un fișier denumit /etc/yum.repos.d/nginx.repo și inserați una dintre configurațiile de mai jos.

CentOS
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/ gpgcheck=0 enabled=1
RHEL
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/rhel/$releasever/$basearch/ gpgcheck=0 enabled=1

Notă: din cauza diferențelor dintre modul CentOS și RHEL, este necesar să înlocuiți $releasever cu fie 6 (pentru 6.x) sau 7 (pentru 7.x), în funcție de versiunea sistemului de operare.

Apoi, adăugați cheia de semnare a depozitului și instalați pachetul nginx așa cum se arată.

# wget --quiet http://nginx.org/keys/nginx_signing.key && rpm --import nginx_signing.key
# yum install nginx

După instalarea cu succes a Nginx, porniți-l, activați-l să pornească automat la pornirea sistemului și verificați dacă este în funcțiune.

---------- On Debian/Ubuntu ---------- 
$ sudo systemctl status nginx
$ sudo systemctl enable nginx
$ sudo systemctl status nginx

---------- On CentOS/RHEL ---------- 
# systemctl status nginx
# systemctl enable nginx
# systemctl status nginx

Dacă rulați un firewall de sistem, trebuie să deschideți portul 80 (HTTP), 443 (HTTPS) și 5000 (aplicația Node), pe care serverul web îl ascultă pentru solicitările de conectare la client.

---------- On Debian/Ubuntu ---------- 
$ sudo ufw allow 80/tcp
$ sudo ufw allow 443/tcp
$ sudo ufw allow 5000/tcp
$ sudo ufw reload

---------- On CentOS/RHEL ---------- 
# firewall-cmd --permanent --add-port=80/tcp
# firewall-cmd --permanent --add-port=443/tcp
# firewall-cmd --permanent --add-port=5000/tcp
# firewall-cmd --reload 

Pasul 4: Configurați Nginx ca proxy invers pentru aplicația Nodejs

Acum creați un fișier de configurare a blocului serverului pentru aplicația dvs. Node sub /etc/nginx/conf.d/, după cum se arată.

$ sudo vim /etc/nginx/conf.d/sysmon.conf 

Copiați și inserați următoarea configurație (schimbați 192.168.43.31 cu IP-ul serverului și tecmint.lan cu numele domeniului).

server {
    listen 80;
    server_name sysmon.tecmint.lan;

    location / {
        proxy_set_header   X-Forwarded-For $remote_addr;
        proxy_set_header   Host $http_host;
        proxy_pass         http://192.168.43.31:5000;
    }
}

Salvați modificările și părăsiți fișierul.

În cele din urmă, reporniți serviciul Nginx pentru a efectua modificările recente.

$ sudo systemctl restart nginx
OR
# systemctl restart nginx

Pasul 5: Accesați aplicația Nodejs prin intermediul browserului web

Acum ar trebui să puteți accesa aplicația Node fără a furniza portul pe care îl ascultă, în adresa URL: aceasta este o modalitate foarte convenabilă pentru utilizatori de a o accesa.

http://sysmon.tecmint.lan 

Pentru ca numele domeniului de testare să funcționeze, trebuie să configurați DNS local folosind fișierul /etc/hosts, să îl deschideți și să adăugați linia de mai jos în el (nu uitați să schimbați 192.168.43.31). cu IP-ul serverului și tecmint.lan cu numele de domeniu ca înainte).

192.168.43.31 sysmon.tecmint.lan

Asta e tot! În acest articol, am arătat cum să configurați Nginx ca proxy invers pentru aplicațiile Nodejs. Folosiți formularul de feedback de mai jos pentru a pune întrebări sau pentru a vă împărtăși părerile despre acest articol.