Nginx เป็นโปรแกรมที่ออกแบบมาเพื่อสำหรับใช้เป็นเว็บเซิร์ฟเวอร์ เพื่อแสดงหน้าเว็บแบบคงที่ (serve static web content) คล้ายกับ Apache2 และยังสามารถใช้เป็น reverse proxy, load balancer, mail proxy และ HTTP cache. Nginx เป็นโปรแกรมที่รับมือคำขอต่างๆ ในแบบ asynchronous สถาปัตยกรรม modular event-driven architecture ของ Nginx สามารถให้ประสิทธิภาพที่คาดการณ์ได้ภายใต้ภาระงานสูง
Reverse Proxy คือ proxy ประเภทหนึ่งที่ค่อยทำหน้าที่รับคำขอจากลูกข่าย (clients) และนำคำขอนั้นส่งต่อไปยัง Apps ต่างๆ ที่อาจทำงานอยู่คนละ ports จึงสามารถส่งข้อมูลกลับไปที่ clients ราวกับว่าเป็น Web Server จริงๆ โดยมันช่วยเพิ่มความสามารถในการปรับขนาดของเซิร์ฟเวอร์ให้มีความความยืดหยุ่น เปิดได้หลายๆ Apps ได้มากยิ่งขึ้น ในเซิร์ฟเวอร์หนึ่งเครื่อง และปลอดภัยยิ่งขึ้น
สำหรับ Ubuntu ใช้คำสั่ง
sudo apt install nginx
และสำหรับ macOS (brew) ใช้คำสั่งนี้
brew install nginx
หลังจากติดตั้งเสร็จแล้ว ให้ลองเข้าไปเช็คใน "/etc/nginx/nginx.conf" ให้แน่ใจว่ามีการ include sites-enabled แล้ว
http {
include /etc/nginx/sites-enabled/default.save;
}
ให้แก้ไขไฟล์ "/etc/nginx/sites-available/default" (ตัวอย่างใช้ nano ในการแก้ไข)
sudo nano /etc/nginx/sites-available/default
โดยให้ใส่ Config ดังนี้ ตัวอย่างต้องการ กำหนด server_name คือ โดเมนเนมที่ลูกข่ายจะส่งคำขอมา ต้องตั้งค่า DNS ของโดเมนเนม โดยเพิ่ม CNAME หรือ A Records ให้ส่งคำขอมาที่เซิร์ฟเวอร์ที่ Nginx ทำงานอยู่ และใส่ proxy_pass ตามด้วยที่อยู่ ภายใน (local) ของแอป เช่น แอปที่ทำงานอยู่บน port 420 ก็จะต้องใส่ค่า http://l27.0.0.1:420 หรือ http://localhost:420 เพื่อให้ Proxy สามารถรับส่งข้อมูลกับแอปได้
server {
server_name abc.com;
location / {
proxy_pass http://127.0.0.1:4444;
}
}
จากนั้นใช้คำสั่งนี้ เพื่อใช้งานการเปลี่ยนแปลงใหม่
sudo nginx -s reload
Node.js จะใช้ทรัพยากรมาก หากต้อง Served Static ไฟล์ อย่างพวก รูปภาพ และไฟล์ต่างๆ ดังนั้นผมจึงสร้าง location /image/ ขึ้นมาเพื่อให้ nginx ทำการ served ไฟล์ใน /image/ แทน จะช่วยเพิ่มความเร็วของเว็บไซต์ โดยจะใช้ alias เชื่อมโยงไปหา Directory ดังกล่าว ดังโค้ดข้างต้น
หากใช้ร่วมกับ Cloudfalre Full SSL ด้วย จะต้องสร้างโดยรับ Request จาก Port 443 แทน ซึ่งจำเป็นต้องใส่ ssl_certificate คือ public key และ ssl_certificate_key คือ private key ที่ได้จาก cloudflare
server {
listen 443 ssl;
listen [::]:443 ssl;
server_name abc.com;
ssl_certificate /path_to/abc-public-key.pem;
ssl_certificate_key /path_to/abc-private-key.pem;
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
location / {
proxy_ssl_server_name on;
proxy_pass http://localhost:4444;
}
location /image/ {
alias /abc/public/image/;
}
}
อ้างอิง: https://en.wikipedia.org/wiki/Nginx
