Πώς να ρυθμίσετε το Nginx ως Reverse Proxy για την εφαρμογή Nodejs


Το Nodejs είναι ένα δωρεάν ανοιχτού κώδικα, ελαφρύ, επεκτάσιμο και αποτελεσματικό πλαίσιο JavaScript που βασίζεται στη μηχανή JavaScript V8 του Chrome και χρησιμοποιεί ένα μοντέλο εισόδου/εξόδου που βασίζεται σε συμβάντα, χωρίς αποκλεισμό. Το Nodejs είναι πλέον παντού και έχει γίνει τόσο δημοφιλές για την ανάπτυξη λογισμικού από ιστότοπους, εφαρμογές ιστού έως εφαρμογές δικτύου και πολλά άλλα.

Το Nginx είναι ένας διακομιστής HTTP ανοικτού κώδικα, υψηλής απόδοσης, λογισμικό εξισορρόπησης φορτίου και αντίστροφου διακομιστή μεσολάβησης. Έχει μια απλή γλώσσα διαμόρφωσης που καθιστά εύκολη τη διαμόρφωση. Σε αυτό το άρθρο, θα δείξουμε πώς να ρυθμίσετε το Nginx ως αντίστροφο διακομιστή μεσολάβησης για εφαρμογές Nodejs.

Διαβάστε επίσης: Ο απόλυτος οδηγός για την ασφάλεια, τη σκλήρυνση και τη βελτίωση της απόδοσης του διακομιστή Web Nginx

Σημείωση: Εάν το σύστημά σας εκτελείται ήδη με Nodejs και NPM και η εφαρμογή σας εκτελείται σε μια συγκεκριμένη θύρα , μεταβείτε κατευθείαν στο Βήμα 4.

Βήμα 1: Εγκατάσταση Nodejs και NPM στο Linux

Η πιο πρόσφατη έκδοση του Node.js και του NPM είναι διαθέσιμη για εγκατάσταση από το επίσημο αποθετήριο δυαδικών διανομών NodeSource Enterprise Linux, Fedora, Debian και Ubuntu, το οποίο διατηρείται από τον ιστότοπο Nodejs και θα χρειαστεί να το προσθέσετε στο σύστημά σας για να μπορείτε να εγκαταστήσετε τα πιο πρόσφατα πακέτα Nodejs και NPM όπως φαίνεται.

Στο 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

Σε CentOS/RHEL και 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 -

Βήμα 2: Δημιουργία εφαρμογής Nodejs

Για λόγους επίδειξης, θα δημιουργήσουμε ένα δείγμα εφαρμογής που ονομάζεται “sysmon”, το οποίο θα εκτελείται στη θύρα 5000 όπως φαίνεται.

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

Αντιγράψτε και επικολλήστε τον ακόλουθο κώδικα στο αρχείο server.js (αντικαταστήστε το 192.168.43.31 με την IP του διακομιστή σας).

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}/`);
});

Αποθηκεύστε το αρχείο και βγείτε.

Τώρα ξεκινήστε την εφαρμογή κόμβου χρησιμοποιώντας την ακόλουθη εντολή (πατήστε Ctrl+x για να την τερματίσετε).

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

Τώρα ανοίξτε ένα πρόγραμμα περιήγησης και αποκτήστε πρόσβαση στην εφαρμογή σας στη διεύθυνση URL http://198.168.43.31:5000.

Βήμα 3: Εγκαταστήστε το Nginx Reverse Proxy στο Linux

Θα εγκαταστήσουμε την πιο πρόσφατη έκδοση του Nginx από το επίσημο αποθετήριο, όπως φαίνεται παρακάτω.

Στο Debian/Ubuntu

Δημιουργήστε ένα αρχείο με το όνομα /etc/apt/sources.list.d/nginx.list και προσθέστε τις ακόλουθες γραμμές σε αυτό.

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

Στη συνέχεια, προσθέστε το κλειδί υπογραφής αποθετηρίου, ενημερώστε το ευρετήριο πακέτου του συστήματός σας και εγκαταστήστε το πακέτο nginx ως εξής.

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

Σε CentOS/RHEL και Fedora

Δημιουργήστε ένα αρχείο με το όνομα /etc/yum.repos.d/nginx.repo και επικολλήστε μία από τις παρακάτω διαμορφώσεις.

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

Σημείωση: Λόγω των διαφορών μεταξύ του τρόπου λειτουργίας του CentOS και του RHEL, είναι απαραίτητο να αντικατασταθεί το $releasever με ένα από τα δύο 6 (για 6.x) ή 7 (για 7.x), ανάλογα με την έκδοση του λειτουργικού σας συστήματος.

Στη συνέχεια, προσθέστε το κλειδί υπογραφής αποθετηρίου και εγκαταστήστε το πακέτο nginx όπως φαίνεται.

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

Μετά την επιτυχή εγκατάσταση του Nginx, ξεκινήστε το, ενεργοποιήστε το να ξεκινήσει αυτόματα κατά την εκκίνηση του συστήματος και ελέγξτε εάν είναι σε λειτουργία και σε λειτουργία.

---------- 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

Εάν εκτελείτε ένα τείχος προστασίας συστήματος, πρέπει να ανοίξετε τις θύρες 80 (HTTP), 443 (HTTPS) και 5000 (εφαρμογή κόμβου), τον οποίο ακούει ο διακομιστής web για αιτήματα σύνδεσης πελάτη.

---------- 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 

Βήμα 4: Διαμορφώστε το Nginx ως Reverse Proxy για την εφαρμογή Nodejs

Τώρα δημιουργήστε ένα αρχείο διαμόρφωσης μπλοκ διακομιστή για την εφαρμογή Node σας στο /etc/nginx/conf.d/ όπως φαίνεται.

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

Αντιγράψτε και επικολλήστε την ακόλουθη διαμόρφωση (αλλάξτε 192.168.43.31 με την IP του διακομιστή σας και tecmint.lan με το όνομα τομέα σας).

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;
    }
}

Αποθηκεύστε τις αλλαγές και βγείτε από το αρχείο.

Τέλος, επανεκκινήστε την υπηρεσία Nginx για να πραγματοποιήσετε τις πρόσφατες αλλαγές.

sudo systemctl restart nginx
OR
systemctl restart nginx

Βήμα 5: Πρόσβαση στην εφαρμογή Nodejs μέσω του προγράμματος περιήγησης Ιστού

Τώρα θα πρέπει να έχετε πρόσβαση στην εφαρμογή Node σας χωρίς να παρέχετε τη θύρα στην οποία ακούει, στη διεύθυνση URL: αυτός είναι ένας πολύ βολικός τρόπος για τους χρήστες να έχουν πρόσβαση σε αυτήν.

http://sysmon.tecmint.lan 

Για να λειτουργήσει το δοκιμαστικό όνομα τομέα σας, πρέπει να ρυθμίσετε το τοπικό DNS χρησιμοποιώντας το αρχείο /etc/hosts, να το ανοίξετε και να προσθέσετε τη γραμμή παρακάτω σε αυτό (θυμηθείτε να αλλάξετε το 192.168.43.31 με την IP του διακομιστή σας και το tecmint.lan με το όνομα τομέα σας όπως πριν).

192.168.43.31 sysmon.tecmint.lan

Αυτό είναι όλο! Σε αυτό το άρθρο, δείξαμε πώς να ρυθμίσετε το Nginx ως αντίστροφο διακομιστή μεσολάβησης για εφαρμογές Nodejs. Χρησιμοποιήστε την παρακάτω φόρμα σχολίων για να κάνετε ερωτήσεις ή να μοιραστείτε τις σκέψεις σας σχετικά με αυτό το άρθρο.