Nginx vs Apache เปรียบเทียบ Web Server

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 แนะนำ

ตารางเปรียบเทียบหลัก

คุณสมบัติNginxApache
สถาปัตยกรรมEvent-driven, Async, Non-blockingProcess/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 StyleBlock-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 ReloadZero-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 clientRAM คงที่ ไม่ OOM แม้ connection ค้างนานRAM พุ่งตามจำนวน connection เสี่ยง OOM
ระบบ modulecompile-in เป็นหลัก (dynamic module ตั้งแต่ 1.9.11)โหลด/ปลด module ขณะรันได้ (a2enmod)

เลือก Nginx เมื่อไหร่

Nginx เหมาะกับงานที่เน้น throughput สูง, การจัดการ connection จำนวนมาก และการเป็นด่านหน้า (edge) ของระบบ ต่อไปนี้คือสถานการณ์ที่ Nginx เป็นตัวเลือกที่ชัดเจน

ตัวอย่าง 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

ตัวอย่าง 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 สองชั้นนี้อาจซับซ้อนเกินจำเป็น — เลือกตัวเดียวให้เชี่ยวจะดูแลง่ายกว่า

เลือกแบบไหนดี — สรุปตามเคส

ใช้ทั้งสองพร้อมกัน (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 ทั้งหมด