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