ทำความรู้จัก NGINX: เว็บเซิร์ฟเวอร์ทรงพลัง พร้อม Reverse Proxy, Load Balancing และ SSL

แชร์ความรู้ Linux Ubuntu Web Server บทความ การ config server Linux FreeBSD Apache
การติดตั้ง XAMPP Mysql PHP ใครต้องการแชร์ความรู้เรื่องต่างๆ เหล่านี้ให้ ท่านหรืออื่น โพสที่หมวดนี้ได้

Moderator: mindphp, ผู้ดูแลกระดาน

Bundith
PHP Super Member
PHP Super Member
โพสต์: 298
ลงทะเบียนเมื่อ: 06/05/2025 9:23 am

ทำความรู้จัก NGINX: เว็บเซิร์ฟเวอร์ทรงพลัง พร้อม Reverse Proxy, Load Balancing และ SSL

โพสต์ที่ยังไม่ได้อ่าน โดย Bundith »

ในยุคดิจิทัลที่ทุกอย่างเคลื่อนที่รวดเร็ว เว็บไซต์และแอปพลิเคชันต้องรองรับผู้ใช้งานจำนวนมากในเวลาอันสั้น ความเร็ว ความเสถียร และความสามารถในการขยายระบบจึงกลายเป็นสิ่งสำคัญอย่างยิ่ง หนึ่งในเทคโนโลยีที่มีบทบาทสำคัญในด้านนี้คือ NGINX (อ่านว่า "Engine X"),NGINX เป็นซอฟต์แวร์โอเพ่นซอร์สที่ถูกออกแบบมาเพื่อเป็น เว็บเซิร์ฟเวอร์ที่มีประสิทธิภาพสูง และยังสามารถทำหน้าที่อื่นๆ ได้อีกมากมาย เช่น reverse proxy, load balancer, API gateway, และ content cache ด้วยคุณสมบัติเหล่านี้ NGINX จึงถูกใช้งานในระบบขนาดใหญ่ระดับโลก เช่น Netflix, Dropbox, Airbnb และ WordPress.com, บทความนี้จะพาคุณไปรู้จักกับ NGINX อย่างละเอียด ตั้งแต่การทำงานเบื้องต้น ตัวอย่างการใช้งานจริง ประโยชน์ที่ได้รับ ไปจนถึงแนวทางและคำแนะนำในการนำไปใช้งานในระบบ production อย่างมั่นใจ
NGINX
NGINX
nginx.png (4.47 KiB) Viewed 587 times
1. NGINX คืออะไร?
NGINX เป็นเว็บเซิร์ฟเวอร์แบบ asynchronous และ event-driven ที่มีความสามารถรองรับคำขอ (requests) จำนวนมากในเวลาเดียวกัน โดยไม่ต้องสร้าง process ใหม่ทุกครั้ง ซึ่งแตกต่างจากเว็บเซิร์ฟเวอร์แบบเก่า เช่น Apache ที่ใช้ model แบบ process-per-connection หรือ thread-per-request
NGINX ถูกพัฒนาโดย Igor Sysoev ในปี 2002 เพื่อแก้ปัญหา C10k (รองรับ 10,000 การเชื่อมต่อพร้อมกัน) และกลายเป็นหนึ่งในเว็บเซิร์ฟเวอร์ที่ได้รับความนิยมมากที่สุดในโลก รองรับทั้ง HTTP, HTTPS, TCP และ UDP

2. ความสามารถหลักของ NGINX
2.1 Web Server
  • ทำหน้าที่ให้บริการเว็บไซต์ (Static content เช่น HTML, CSS, JS หรือไฟล์ media)
  • มีความเร็วในการเสิร์ฟไฟล์สูงกว่าหลายเซิร์ฟเวอร์
  • ทำงานแบบ non-blocking ทำให้รองรับผู้ใช้พร้อมกันได้มาก
2.2 Reverse Proxy
  • รับ request จาก client แล้วส่งต่อให้ backend server (เช่น Node.js, PHP, Python, Go)
  • ช่วยซ่อน IP ของ backend จริง
  • สามารถ load balance backend หลายตัวได้
2.3 Load Balancer
รองรับวิธีการกระจายโหลดหลากหลาย:
  • Round Robin
  • Least Connections
  • IP Hash
2.4 SSL Termination
  • ทำหน้าที่แปลง HTTPS → HTTP เพื่อให้ backend ไม่ต้องจัดการ TLS เอง
  • ลดภาระ CPU ของ backend
2.5 Caching
  • เก็บ static content หรือผลลัพธ์จาก backend ไว้ที่ edge เพื่อลดภาระ backend และเพิ่มความเร็ว
3. ตัวอย่างการใช้งาน NGINX
3.1 Static Website Hosting

โค้ด: เลือกทั้งหมด

server {
    listen 80;
    server_name example.com;

    root /var/www/html;
    index index.html;
}
เมื่อมีผู้ใช้เข้าเว็บไซต์ example.com NGINX จะเสิร์ฟไฟล์ HTML ที่อยู่ในโฟลเดอร์ /var/www/html

3.2 Reverse Proxy ไปยังแอป Node.js

โค้ด: เลือกทั้งหมด

server {
    listen 80;
    server_name api.example.com;

    location / {
        proxy_pass http://localhost:3000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}
เมื่อ client เรียก api.example.com NGINX จะส่ง request ไปยัง backend Node.js ที่รันอยู่บน port 3000

3.3 Load Balancing ไปยังหลาย backend

โค้ด: เลือกทั้งหมด

upstream backend_servers {
    server 192.168.1.101;
    server 192.168.1.102;
}

server {
    listen 80;
    location / {
        proxy_pass http://backend_servers;
    }
}
NGINX จะกระจายโหลดระหว่าง 2 backend โดยอัตโนมัติ

3.4 HTTPS + HTTP to HTTPS Redirect

โค้ด: เลือกทั้งหมด

server {
    listen 80;
    server_name example.com;
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl;
    server_name example.com;

    ssl_certificate /etc/nginx/ssl/cert.pem;
    ssl_certificate_key /etc/nginx/ssl/key.pem;

    location / {
        root /var/www/html;
        index index.html;
    }
}
NGINX จะ redirect ทุกการเข้า HTTP ไปยัง HTTPS และให้บริการด้วย TLS

4. ประโยชน์ของการใช้ NGINX
1. รองรับโหลดสูงได้อย่างมีประสิทธิภาพ
NGINX ออกแบบมาให้รองรับผู้ใช้งานพร้อมกันจำนวนมากโดยใช้หน่วยความจำและ CPU น้อยกว่าซอฟต์แวร์ประเภทเดียวกัน

2. ทำงานหลายบทบาทได้ในตัวเดียว
ไม่ต้องใช้หลายซอฟต์แวร์: NGINX เป็นได้ทั้ง web server, reverse proxy, load balancer, SSL terminator, และ cache server

3. ตั้งค่าที่ยืดหยุ่น
ไฟล์ config ของ NGINX เขียนง่ายและเข้าใจได้รวดเร็ว รองรับ conditional routing, regex, variable, upstream routing ฯลฯ

4. ปลอดภัยและเสถียร
NGINX มีการอัปเดตความปลอดภัยอย่างต่อเนื่อง และมีความเสถียรสูง สามารถทำงานได้ต่อเนื่องเป็นปีโดยไม่ต้อง restart

5. รองรับการทำงานร่วมกับ Docker และ Kubernetes
สามารถใช้ NGINX เป็น Ingress Controller สำหรับ Kubernetes หรือ frontend ของ container-based application ได้ง่าย

5. คำแนะนำในการนำ NGINX ไปใช้จริง
5.1 ใช้ TLS เสมอ
  • ติดตั้ง Let’s Encrypt ร่วมกับ Certbot เพื่อได้ SSL certificate ฟรีและปลอดภัย
  • ใช้ TLS 1.2 หรือสูงกว่า
  • ปิด SSL เวอร์ชันเก่า (เช่น SSLv3)
5.2 เปิด gzip compression

โค้ด: เลือกทั้งหมด

gzip on;
gzip_types text/plain application/json;
ช่วยลดขนาด response ที่ส่งให้ client ทำให้เว็บโหลดเร็วขึ้น

5.3 ใช้ caching ให้เหมาะสม
  • กำหนด cache header สำหรับ static file
  • ใช้ proxy cache สำหรับ API หรือ HTML ที่โหลดบ่อยแต่เปลี่ยนไม่บ่อย
5.4 ใช้ rate limiting เพื่อป้องกัน DOS

โค้ด: เลือกทั้งหมด

limit_req_zone $binary_remote_addr zone=req_limit:10m rate=5r/s;

server {
    location /api/ {
        limit_req zone=req_limit burst=10;
    }
}
จำกัดการยิง request API เพื่อลดความเสี่ยงจากการโจมตี

5.5 แยกไฟล์ config ตามบริการ
หากมีหลายเว็บไซต์หรือหลายระบบ backend แนะนำให้แยกเป็นไฟล์ config ย่อยใน /etc/nginx/sites-available/ และ symlink ไปยัง /etc/nginx/sites-enabled/

5.6 ใช้ระบบ Monitoring
ติดตั้งเครื่องมืออย่าง nginx-prometheus-exporter, Grafana, หรือ Datadog เพื่อดูทราฟฟิกและสุขภาพระบบ

สรุป
NGINX ไม่ได้เป็นเพียงแค่เว็บเซิร์ฟเวอร์ แต่คือเครื่องมืออเนกประสงค์ที่สามารถตอบโจทย์สถาปัตยกรรมของระบบสมัยใหม่ได้อย่างรอบด้าน ไม่ว่าจะเป็นการให้บริการเนื้อหา, ทำ reverse proxy ไปยัง backend, กระจายโหลด, ทำ SSL termination หรือ caching, ข้อดีหลักของ NGINX คือประสิทธิภาพสูง การใช้ทรัพยากรต่ำ และความสามารถในการปรับแต่งอย่างยืดหยุ่น ทำให้สามารถนำไปใช้งานได้ทั้งในระดับเริ่มต้น ไปจนถึงระดับ enterprise, สำหรับผู้ที่เริ่มต้น แนะนำให้ลองใช้ NGINX เป็น reverse proxy หรือ web server ธรรมดาก่อน แล้วค่อย ๆ ขยายไปสู่ฟีเจอร์อื่น ๆ เช่น load balancing, caching และ security เมื่อระบบเติบโตขึ้น, สุดท้าย NGINX คือหนึ่งในเครื่องมือที่ควรมีติดคลังไว้ หากคุณต้องการสร้างระบบที่เร็ว ปลอดภัย และรองรับการเติบโตในอนาคตอย่างมั่นคง

อ้างอิง
https://docs.nginx.com/nginx/admin-guide/installing-nginx/installing-nginx-open-source/
https://docs.gitlab.com/omnibus/settings/nginx/
https://ubuntu.com/tutorials/install-and-configure-nginx#1-overview
  • Similar Topics
    ตอบกลับ
    แสดง
    โพสต์ล่าสุด

ผู้ใช้งานขณะนี้

สมาชิกกำลังดูบอร์ดนี้: ไม่มีสมาชิกใหม่ และบุคลทั่วไป 6