ค้นหาเว็บไซต์

วิธีกำหนดค่า Nginx เป็น Reverse Proxy สำหรับแอป Nodejs


Nodejs เป็นเฟรมเวิร์ก JavaScript แบบโอเพ่นซอร์สน้ำหนักเบา ปรับขนาดได้ และมีประสิทธิภาพ สร้างขึ้นจากกลไก V8 JavaScript ของ Chrome และใช้โมเดล I/O ที่ขับเคลื่อนด้วยเหตุการณ์และไม่มีการบล็อก ปัจจุบัน Nodejs มีอยู่ทุกที่ และได้รับความนิยมอย่างมากในการพัฒนาซอฟต์แวร์ตั้งแต่เว็บไซต์ เว็บแอป ไปจนถึงแอปเครือข่าย และอื่นๆ

Nginx เป็นโอเพ่นซอร์ส เซิร์ฟเวอร์ HTTP ประสิทธิภาพสูง ตัวจัดสรรภาระงาน และซอฟต์แวร์พร็อกซีย้อนกลับ มีภาษาการกำหนดค่าที่ตรงไปตรงมาทำให้ง่ายต่อการกำหนดค่า ในบทความนี้ เราจะแสดงวิธีกำหนดค่า Nginx เป็นพร็อกซีย้อนกลับสำหรับแอปพลิเคชัน Nodejs

อ่านเพิ่มเติม: สุดยอดคู่มือในการรักษาความปลอดภัย เสริมประสิทธิภาพ และปรับปรุงประสิทธิภาพของเว็บเซิร์ฟเวอร์ Nginx

หมายเหตุ: หากระบบของคุณทำงานด้วย Nodejs และ NPM อยู่แล้ว และให้แอปของคุณทำงานบนพอร์ตบางพอร์ต ตรงไปยังขั้นตอนที่ 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

บน 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 เวอร์ชันล่าสุดจากพื้นที่เก็บข้อมูลอย่างเป็นทางการ ดังที่แสดงด้านล่าง

บนเดเบียน/อูบุนตู

สร้างไฟล์ชื่อ /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
เรเอล
[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 (แอปโหนด) ซึ่งเว็บเซิร์ฟเวอร์รับฟังคำขอเชื่อมต่อกับไคลเอนต์

---------- 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 ใช้แบบฟอร์มคำติชมด้านล่างเพื่อถามคำถามหรือแบ่งปันความคิดเห็นของคุณเกี่ยวกับบทความนี้