ວິທີການຕັ້ງຄ່າ Nginx ເປັນໂປແກຼມ Reverse Proxy ສຳ ລັບ Nodejs App


Nodejs ແມ່ນໂປແກຼມ Javascript ທີ່ເປີດໃຫ້ໃຊ້ງານຟຣີ, ມີນ້ ຳ ໜັກ ເບົາ, ສາມາດປັບຂະ ໜາດ ໄດ້ແລະມີປະສິດຕິພາບທີ່ສ້າງຂື້ນໃນເຄື່ອງຈັກ V8 JavaScript ຂອງ Chrome, ແລະໃຊ້ຮູບແບບ I/O ທີ່ໃຊ້ງານ, ບໍ່ໄດ້ປິດກັ້ນ. Nodejs ປະຈຸບັນຢູ່ທົ່ວທຸກແຫ່ງ, ແລະໄດ້ຮັບຄວາມນິຍົມຫຼາຍໃນການພັດທະນາຊອບແວຈາກເວບໄຊທ໌, ແອັບ web ເວັບຈົນເຖິງແອັບ to ເຄືອຂ່າຍແລະອື່ນໆ.

Nginx ແມ່ນແຫຼ່ງເປີດ, ເຄື່ອງແມ່ຂ່າຍ HTTP ທີ່ມີປະສິດຕິພາບສູງ, ມີຄວາມສົມດຸນໃນການໂຫຼດແລະໂປແກຼມໂປແກຼມຕົວແທນ. ມັນມີພາສາການຕັ້ງຄ່າທີ່ກົງໄປກົງມາເຮັດໃຫ້ງ່າຍຕໍ່ການຕັ້ງຄ່າ. ໃນບົດຂຽນນີ້, ພວກເຮົາຈະສະແດງວິທີການຕັ້ງຄ່າ Nginx ເປັນຕົວແທນດ້ານຫລັງ ສຳ ລັບການ ນຳ ໃຊ້ Nodejs.

ໝາຍ ເຫດ: ຖ້າລະບົບຂອງທ່ານເຮັດວຽກກັບ Nodejs ແລະ NPM ແລ້ວ, ແລະໃຫ້ແອັບ your ຂອງທ່ານແລ່ນຢູ່ທ່າເຮືອໃດ ໜຶ່ງ, ໃຫ້ໄປທີ່ຂັ້ນຕອນທີ 4.

ຂັ້ນຕອນທີ 1: ການຕິດຕັ້ງ Nodejs ແລະ NPM ໃນ Linux

Node.js ແລະ NPM ລຸ້ນລ້າສຸດແມ່ນມີການຕິດຕັ້ງຈາກຫ້ອງການແຈກຈ່າຍ ຈຳ ຫນ່າຍຖານຂໍ້ມູນ NodeSource Enterprise Linux, Fedora, Debian ແລະ Ubuntu ເຊິ່ງຖືກຮັກສາໄວ້ໂດຍເວັບໄຊທ໌ Nodejs ແລະທ່ານຈະຕ້ອງເພີ່ມມັນເຂົ້າໃນລະບົບຂອງທ່ານເພື່ອໃຫ້ສາມາດ ຕິດຕັ້ງຊຸດ Nodejs ແລະ NPM ລ້າສຸດຕາມທີ່ສະແດງ.

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

ສຳ ລັບຈຸດປະສົງການສາທິດ, ພວກເຮົາຈະສ້າງໂປແກຼມ ນຳ ໃຊ້ຕົວຢ່າງ ໜຶ່ງ ທີ່ມີຊື່ວ່າ "sysmon", ເຊິ່ງຈະໃຊ້ໃນພອດ 5000 ດັ່ງທີ່ສະແດງ.

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

ຄັດລອກແລະວາງລະຫັດຕໍ່ໄປນີ້ໃນແຟ້ມ server.js (ທົດແທນ 192.168.43.31 ກັບ IP server ຂອງທ່ານ).

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

ບັນທຶກເອກະສານແລະອອກ.

ຕອນນີ້ເລີ່ມຕົ້ນໃຊ້ໂປແກຼມ node ຂອງທ່ານໂດຍໃຊ້ ຄຳ ສັ່ງຕໍ່ໄປນີ້ (ກົດ 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 <198.168.43.31:5000 .

ຂັ້ນຕອນທີ 3: ຕິດຕັ້ງ Nginx Reverse Proxy ໃນ Linux

ພວກເຮົາຈະຕິດຕັ້ງ Nginx ລຸ້ນລ້າສຸດຈາກຫໍສະຫມຸດຢ່າງເປັນທາງການ, ດັ່ງທີ່ສະແດງຢູ່ຂ້າງລຸ່ມ.

ສ້າງແຟ້ມເອກະສານທີ່ມີຊື່ວ່າ /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

ສ້າງແຟ້ມເອກະສານທີ່ມີຊື່ວ່າ /etc/yum.repos.d/nginx.repo ແລະວາງ ໜຶ່ງ ໃນການຕັ້ງຄ່າຂ້າງລຸ່ມນີ້.

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

ໝາຍ ເຫດ: ເນື່ອງຈາກຄວາມແຕກຕ່າງລະຫວ່າງ CentOS ແລະ RHEL, ມັນ ຈຳ ເປັນຕ້ອງປ່ຽນແທນ $ລຸ້ນປ່ອຍ ໂດຍທັງ 6 (ສຳ ລັບ 6.x) ຫຼື 7 (ສຳ ລັບ 7.x), ຂື້ນກັບລຸ້ນ OS ຂອງທ່ານ.

ຕໍ່ໄປ, ຕື່ມລະຫັດເຊັນໃບເກັບຮັກສາແລະຕິດຕັ້ງ nginx package ດັ່ງທີ່ສະແດງໄວ້.

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

ຫຼັງຈາກການຕິດຕັ້ງ Nginx ປະສົບຜົນ ສຳ ເລັດ, ເລີ່ມຕົ້ນມັນ, ເຮັດໃຫ້ມັນສາມາດເລີ່ມຕົ້ນໂດຍອັດຕະໂນມັດໃນເວລາທີ່ boot system ແລະກວດເບິ່ງວ່າມັນ ກຳ ລັງແລ່ນຢູ່ຫລືບໍ່.

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

ຖ້າທ່ານ ກຳ ລັງໃຊ້ firewall ຂອງລະບົບ, ທ່ານ ຈຳ ເປັນຕ້ອງເປີດ port 80 (HTTP), 443 (HTTPS) ແລະ 5000 (app Node), ເຊິ່ງ web server ໄດ້ຟັງ ສຳ ລັບ ຄຳ ຂໍການເຊື່ອມຕໍ່ຂອງລູກຄ້າ.

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

ຕອນນີ້ສ້າງເອກະສານການຕັ້ງຄ່າບລັອກເຊີຟເວີ ສຳ ລັບແອັບ 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 Application ຜ່ານ Web Browser

ຕອນນີ້ທ່ານຄວນຈະສາມາດເຂົ້າເຖິງແອັບode Node ຂອງທ່ານໂດຍບໍ່ຕ້ອງໃຫ້ພອດທີ່ມັນ ກຳ ລັງຟັງຢູ່ໃນ URL: ນີ້ແມ່ນວິທີທີ່ສະດວກ ສຳ ລັບຜູ້ໃຊ້ສາມາດເຂົ້າເຖິງມັນ.

http://sysmon.tecmint.lan 

ເພື່ອໃຫ້ຊື່ໂດເມນທົດສອບຂອງທ່ານເຮັດວຽກ, ທ່ານ ຈຳ ເປັນຕ້ອງຕັ້ງ DNS ທ້ອງຖິ່ນໂດຍໃຊ້ເອກະສານ/etc/hosts, ເປີດມັນແລະເພີ່ມສາຍຢູ່ທາງລຸ່ມໃນມັນ (ຈື່ວ່າຈະປ່ຽນ 192.168.43.31 ກັບ IP server ຂອງທ່ານແລະ tecmint.lan ກັບຊື່ doamin ຂອງທ່ານ ຄືແຕ່ກ່ອນ).

192.168.43.31 sysmon.tecmint.lan

ຫມົດເທົ່ານີ້! ໃນບົດຂຽນນີ້, ພວກເຮົາໄດ້ສະແດງວິທີການຕັ້ງຄ່າ Nginx ເປັນຕົວແທນດ້ານຫລັງ ສຳ ລັບການ ນຳ ໃຊ້ Nodejs. ໃຊ້ແບບຟອມການ ຕຳ ນິຕິຊົມຂ້າງລຸ່ມນີ້ເພື່ອຖາມ ຄຳ ຖາມໃດໆຫຼືແບ່ງປັນຄວາມຄິດຂອງທ່ານກ່ຽວກັບບົດຂຽນນີ້.