
Apache ครองตลาด Web Server มานานกว่า 30 ปี ส่วน Nginx เกิดขึ้นมาเพื่อแก้ปัญหาที่ Apache ทำได้ไม่ดี และปัจจุบัน Nginx แซงหน้า Apache ในแง่จำนวนเซิร์ฟเวอร์ที่ใช้งานจริงทั่วโลก แต่นั่นไม่ได้หมายความว่า Nginx ดีกว่าในทุกกรณี
บทความนี้เปรียบเทียบ Nginx กับ Apache อย่างตรงไปตรงมา ตั้งแต่สถาปัตยกรรม, ประสิทธิภาพ, การรัน PHP, .htaccess, Virtual Host และ use case ที่แต่ละตัวเหนือกว่า
สรุปสั้น: เลือก Nginx สำหรับ VPS ที่ต้องการประสิทธิภาพสูง, Static files, Reverse Proxy, Node.js/Python app เลือก Apache เมื่อต้องการ .htaccess per-directory config, mod_rewrite ที่ Shared Hosting ส่วนใหญ่ใช้ หรือเมื่อ deploy ไปบน Hosting ที่ไม่มีสิทธิ์เปลี่ยน web server
Apache คืออะไร
Apache HTTP Server เปิดตัวปี 1995 จาก NCSA HTTPd ปัจจุบันดูแลโดย Apache Software Foundation ใช้สถาปัตยกรรม Process-based / Thread-based (MPM) — แต่ละ request รัน process หรือ thread ของตัวเอง ทำให้ isolate ง่าย แต่ใช้ RAM มากเมื่อ concurrent connections สูง
จุดเด่นที่ทำให้ Apache ยังอยู่ได้คือ .htaccess — ไฟล์ config per-directory ที่ developer (ไม่ใช่ admin) แก้ได้ ทำให้ Shared Hosting ทุกเจ้าใช้ Apache เป็นมาตรฐาน
Nginx คืออะไร
Nginx (อ่านว่า "engine-x") สร้างโดย Igor Sysoev ปี 2004 เพื่อแก้ปัญหา C10K (ให้บริการ 10,000 concurrent connections พร้อมกัน) ใช้สถาปัตยกรรม Event-driven, Non-blocking, Asynchronous — process เดียว (worker) รับ request หลายพันได้พร้อมกันด้วย event loop
ปัจจุบัน Nginx ถูกใช้เป็น Reverse Proxy หน้า app server (Node.js, Python, PHP-FPM) มากกว่าใช้ standalone และเป็น Web Server default บน VPS Ubuntu ที่ทุก tutorial แนะนำ
ตารางเปรียบเทียบหลัก
| คุณสมบัติ | Nginx | Apache |
|---|---|---|
| สถาปัตยกรรม | Event-driven, Async, Non-blocking | Process/Thread-based (MPM) |
| Concurrent Connections | สูงมาก (event loop) | ต่ำกว่าที่ traffic สูง |
| RAM Usage (idle) | ต่ำมาก (~3–5 MB/worker) | สูงกว่า (~10–30 MB/process) |
| Static File Serving | เร็วกว่ามาก | ช้ากว่า |
| PHP Support | ผ่าน PHP-FPM (ต้องตั้งค่า) | mod_php / PHP-FPM |
| .htaccess | ❌ ไม่รองรับ | ✅ รองรับ per-directory |
| Config Style | Block-based (nginx.conf) | Directive-based (.htaccess / httpd.conf) |
| Reverse Proxy | ✅ ยอดเยี่ยม | ✅ mod_proxy (ช้ากว่า) |
| SSL/TLS Termination | ✅ รวดเร็ว | ✅ mod_ssl |
| WebSocket | ✅ รองรับ native | ✅ mod_proxy_wstunnel |
| Load Balancing | ✅ built-in | ✅ mod_proxy_balancer |
| Shared Hosting | ❌ ไม่มีบน Shared Hosting ส่วนใหญ่ | ✅ มาตรฐาน Shared Hosting |
| Config Reload | Zero-downtime (signal) | Graceful restart |
ความแตกต่างเชิงปฏิบัติ 5 ด้าน
1. สถาปัตยกรรม — ต้นตอของทุกความแตกต่าง
Apache สร้าง process หรือ thread ใหม่สำหรับแต่ละ connection (Prefork/Worker/Event MPM) ทำให้ RAM และ CPU พุ่งสูงเมื่อมี concurrent connections มาก ส่วน Nginx ใช้ event loop ใน single process — worker รับ I/O event โดยไม่ block รอ ทำให้รัน 10,000+ connections ได้โดยใช้ RAM คงที่
ในทางปฏิบัติบน VPS RAM 1GB ที่ traffic ปกติ ความต่างนี้อาจไม่เห็นชัด แต่เมื่อมี spike traffic หรือ slow clients (connection ค้างนาน) Nginx จะไม่ OOM ขณะที่ Apache อาจหยุดรับ connection ใหม่
2. .htaccess — ข้อจำกัดใหญ่ที่สุดของ Nginx
Apache อ่าน .htaccess ใน directory ทุกครั้งที่มี request ทำให้ developer ตั้งค่า redirect, auth, rewrite ได้โดยไม่ต้องแตะ server config — นี่คือเหตุผลที่ WordPress, CodeIgniter และ PHP framework ทุกตัวสร้าง .htaccess ออกมา
Nginx ไม่มี .htaccess แนวคิด — config ทั้งหมดต้องอยู่ใน /etc/nginx/sites-available/ ซึ่งต้องการ sudo access ทำให้ไม่เหมาะกับ Shared Hosting ที่ต้องให้ user แต่ละคนตั้งค่าเองได้
⚠️ WordPress บน Nginx: WordPress ใช้ mod_rewrite ผ่าน .htaccess สำหรับ Pretty Permalinks บน Nginx ต้องเพิ่ม config ใน server block เองเช่น try_files $uri $uri/ /index.php?$args; — ต้องทำเองทุกครั้ง ไม่มี plugin ทำแทนได้ทั้งหมด
3. Static File Performance
Nginx เสิร์ฟ static file (HTML, CSS, JS, ภาพ) ได้เร็วกว่า Apache อย่างมีนัยสำคัญ เพราะ event-driven I/O + sendfile() system call ที่เร็วกว่า ในการทดสอบจริง Nginx เสิร์ฟ static file ได้เร็วกว่า Apache 2–5 เท่าในสถานการณ์ high concurrency
อย่างไรก็ตาม หาก traffic ไม่สูงและมี cache layer (Varnish, Redis, CDN) ความต่างนี้แทบไม่สำคัญในทางปฏิบัติ
4. PHP — ทั้งคู่ใช้ PHP-FPM ได้
Apache ยุคใหม่ใช้ PHP-FPM แทน mod_php เหมือน Nginx แล้ว — performance ของ PHP เองจึงต่างกันน้อยมาก ส่วนที่ต่างคือ Apache สามารถใช้ mod_php แบบ in-process ได้ซึ่งตั้งง่ายกว่า แต่ไม่แนะนำเพราะ PHP crash = Apache crash
5. Reverse Proxy สำหรับ Node.js / Python / Go
เมื่อรัน App server เช่น Node.js (Express, Next.js) หรือ Python (Gunicorn, FastAPI) Nginx เป็น Reverse Proxy ที่ดีที่สุด — config ง่ายกว่า, buffer request body ได้ดีกว่า, รองรับ upstream health check และ load balancing แบบ round-robin/least_conn
Apache ทำ Reverse Proxy ได้ด้วย mod_proxy แต่ config ยุ่งยากกว่าและ performance ต่ำกว่าในสถานการณ์ high traffic
ตารางเปรียบเทียบเชิงลึก 6 มิติ
นอกจากตารางคุณสมบัติด้านบนแล้ว ตารางนี้เจาะลึกลงไปในมิติที่มีผลต่อการตัดสินใจจริงบน VPS โดยเฉพาะเรื่อง pattern ของ traffic, การ scale และความยากในการดูแล
| มิติ | Nginx (Event-driven) | Apache (Process/Thread) |
|---|---|---|
| โมเดลการประมวลผล | 1 worker จัดการหลายพัน connection ด้วย event loop (epoll/kqueue) | 1 process หรือ thread ต่อ 1 connection (Prefork/Worker/Event MPM) |
| Static file (HTML/CSS/JS/รูป) | เร็วกว่า ใช้ sendfile() ส่งไฟล์จาก kernel ตรง | ช้ากว่าเล็กน้อย ผ่าน module layer มากกว่า |
| เนื้อหา dynamic (PHP/Python) | ส่งต่อให้ PHP-FPM/upstream เสมอ ตัวมันไม่รัน app | รันได้ในตัวด้วย mod_php หรือส่งต่อ PHP-FPM |
| per-directory config (.htaccess) | ไม่มี — config รวมศูนย์ที่ server block | มี — แก้ต่อ directory ได้โดยไม่ reload server |
| พฤติกรรมตอน load สูง / slow client | RAM คงที่ ไม่ OOM แม้ connection ค้างนาน | RAM พุ่งตามจำนวน connection เสี่ยง OOM |
| ระบบ module | compile-in เป็นหลัก (dynamic module ตั้งแต่ 1.9.11) | โหลด/ปลด module ขณะรันได้ (a2enmod) |
เลือก Nginx เมื่อไหร่
Nginx เหมาะกับงานที่เน้น throughput สูง, การจัดการ connection จำนวนมาก และการเป็นด่านหน้า (edge) ของระบบ ต่อไปนี้คือสถานการณ์ที่ Nginx เป็นตัวเลือกที่ชัดเจน
- เว็บ traffic สูง / มี spike บ่อย — event loop รองรับ concurrent connection จำนวนมากโดยไม่กิน RAM เพิ่มตามสัดส่วน
- เสิร์ฟ static / เป็น CDN origin — เสิร์ฟไฟล์รูป, วิดีโอ, asset ได้เร็วและเบากว่า
- Reverse proxy หน้า Node.js / Python / Go — config สั้น อ่านง่าย รองรับ load balancing และ upstream health check
- SSL/TLS termination + HTTP/2 / HTTP/3 — จัดการ handshake จำนวนมากได้นิ่งกว่า
- VPS RAM น้อย (1–2 GB) — worker กิน RAM ระดับไม่กี่ MB ทำให้เหลือ RAM ให้ database/app มากขึ้น
ตัวอย่าง server block พื้นฐานสำหรับ proxy ไป app ที่รันอยู่ port 3000:
server {
listen 80;
server_name example.com;
location / {
proxy_pass http://127.0.0.1:3000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
เลือก Apache เมื่อไหร่
Apache ยังเป็นตัวเลือกที่เหมาะสมและบางครั้ง "ง่ายกว่า" โดยเฉพาะเมื่องานต้องพึ่ง .htaccess หรือ ecosystem ที่ออกแบบมาเพื่อ Apache
- Shared Hosting — แทบทั้งหมดใช้ Apache เพราะ .htaccess ให้ user แต่ละคนตั้งค่าเองได้โดยไม่ต้องมี root
- เว็บที่พึ่ง .htaccess เยอะ — redirect rules, Basic Auth, mod_rewrite ที่ framework สร้างให้อัตโนมัติ
- WordPress / PHP framework แบบติดตั้งเร็ว — Pretty Permalinks ทำงานได้ทันทีจาก .htaccess ไม่ต้องเขียน config เพิ่ม
- ต้องการโหลด module ขณะรัน — เปิด/ปิด mod_ ต่าง ๆ ด้วย
a2enmod/a2dismodแล้ว reload ได้ทันที - ทีมคุ้นเคย Apache อยู่แล้ว — config directive แบบ per-directory เข้าใจง่ายสำหรับ developer ที่ไม่ใช่ sysadmin
ตัวอย่าง VirtualHost ของ Apache ที่ใช้ PHP-FPM ผ่าน proxy:
<VirtualHost *:80>
ServerName example.com
DocumentRoot /var/www/example/public
<Directory /var/www/example/public>
AllowOverride All
Require all granted
</Directory>
<FilesMatch \.php$>
SetHandler "proxy:unix:/run/php/php8.3-fpm.sock|fcgi://localhost"
</FilesMatch>
</VirtualHost>
ใช้ทั้งคู่ร่วมกัน (Nginx reverse proxy + Apache backend)
setup ยอดนิยมบน VPS ที่ต้องการทั้งความเร็วของ Nginx และความสะดวกของ .htaccess คือให้ Nginx อยู่ด่านหน้า (port 80/443) เสิร์ฟ static file และทำ SSL termination ส่วน request ที่เป็น PHP/dynamic ค่อยส่งต่อไปให้ Apache ที่ฟังอยู่ port 8080 ด้านหลัง
ข้อดีคือได้ static performance + connection handling ของ Nginx ขณะที่ PHP app ยังใช้ .htaccess เดิมได้ไม่ต้องแปลง rewrite rule ทั้งหมดมาเป็น nginx config ตัวอย่าง config ฝั่ง Nginx ที่ proxy ต่อไป Apache:
server {
listen 80;
server_name example.com;
root /var/www/example/public;
# static เสิร์ฟด้วย Nginx ตรง
location ~* \.(jpg|jpeg|png|gif|css|js|webp|svg)$ {
expires 30d;
try_files $uri =404;
}
# ที่เหลือส่งต่อ Apache (port 8080)
location / {
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
ข้อควรระวัง: Apache ต้องอ่าน IP จริงของ client จาก header X-Forwarded-For (ใช้ mod_remoteip) ไม่งั้น log จะเห็นแต่ 127.0.0.1 และสำหรับ VPS ส่วนตัวที่ traffic ไม่สูง setup สองชั้นนี้อาจซับซ้อนเกินจำเป็น — เลือกตัวเดียวให้เชี่ยวจะดูแลง่ายกว่า
เลือกแบบไหนดี — สรุปตามเคส
- Shared Hosting ทั่วไป: Apache (ไม่มีทางเลือก — Hosting ส่วนใหญ่ใช้ Apache)
- VPS รัน WordPress: Nginx + PHP-FPM (ต้องตั้งค่า try_files เพิ่ม) หรือ Apache (ง่ายกว่าเพราะ .htaccess ใช้ได้เลย)
- VPS รัน Node.js / Python / Go App: Nginx เป็น Reverse Proxy ชัดเจน
- High Traffic Static Site / CDN Origin: Nginx
- เว็บที่ใช้ .htaccess เยอะ (redirect rules, Basic Auth): Apache ง่ายกว่ามาก
- มือใหม่บน VPS เริ่มต้น: Nginx เพราะ tutorial สมัยนี้ส่วนใหญ่ใช้ Nginx
- Production ที่ต้องการ Zero-downtime reload: ทั้งคู่ทำได้ แต่ Nginx ง่ายกว่าด้วย
nginx -s reload
ใช้ทั้งสองพร้อมกัน (Nginx + Apache)
หลาย Shared Hosting เช่น LiteSpeed หรือ setup ขั้นสูงบน VPS ใช้ Nginx เป็น Frontend Reverse Proxy + Apache รัน PHP ด้านหลัง (port 8080) — ได้ประโยชน์ทั้งสอง: Nginx จัดการ static files และ connection ได้เร็ว ส่วน Apache รองรับ .htaccess สำหรับ PHP app
แต่สำหรับ VPS ส่วนตัว setup นี้ซับซ้อนเกินจำเป็น แนะนำให้เลือกอย่างใดอย่างหนึ่งและใช้ให้เต็มที่
คำถามที่พบบ่อย (FAQ)
Nginx เร็วกว่า Apache จริงไหม
เร็วกว่าในงานเสิร์ฟ static file และตอนมี concurrent connection จำนวนมาก เพราะใช้ event loop กับ sendfile() แต่สำหรับเนื้อหา dynamic (PHP) ที่ทั้งคู่ใช้ PHP-FPM เหมือนกัน ความต่างแทบไม่มี และถ้ามี cache layer (CDN/Varnish/Redis) อยู่หน้า ความต่างก็ยิ่งไม่สำคัญในทางปฏิบัติ
Nginx ใช้ .htaccess ได้ไหม
ไม่ได้ Nginx ไม่มีแนวคิด per-directory config แบบ .htaccess เลย ทุกอย่างต้องเขียนใน server block ที่ /etc/nginx/ ซึ่งต้องมีสิทธิ์ root และต้อง nginx -s reload หลังแก้ ถ้าเว็บพึ่ง .htaccess เยอะ การย้ายมา Nginx ต้องแปลง rewrite rule เองทั้งหมด
WordPress ควรใช้ Nginx หรือ Apache
ทั้งคู่ใช้ได้ Apache ง่ายกว่าเพราะ Pretty Permalinks ทำงานทันทีจาก .htaccess ที่ WordPress สร้างให้ ส่วน Nginx เร็วกว่าตอน traffic สูงแต่ต้องเพิ่ม try_files $uri $uri/ /index.php?$args; ใน server block เอง สำหรับเว็บ traffic สูงแนะนำ Nginx + PHP-FPM
รัน Nginx กับ Apache บนเครื่องเดียวพร้อมกันได้ไหม
ได้ และเป็น pattern ที่นิยม โดยให้ Nginx ฟัง port 80/443 ด่านหน้าเสิร์ฟ static + ทำ SSL ส่วน Apache ฟัง port 8080 ด้านหลังรัน PHP ผ่าน .htaccess เดิม ทั้งสองต้องฟังคนละ port ห้ามชนกัน และ Apache ควรตั้ง mod_remoteip เพื่ออ่าน IP จริงของ client
พร้อมติดตั้ง Nginx หรือ Apache บน VPS?
AsiaGB มี VPS Ubuntu 22.04 LTS SSD เริ่มต้น 500 บาท/เดือน พร้อม Full Root Access ติดตั้ง Web Server เองได้ทันที
ดูแพ็กเกจ VPS ทั้งหมด