VPS

ตั้งค่า Nginx FastCGI Cache บน VPS เร่งความเร็วเว็บ WordPress อย่างมีประสิทธิภาพ

อัพเดต 20 ก.ย. 2569 · อ่าน 12 นาที · VPS / WordPress

ตั้งค่า Nginx FastCGI Cache บน VPS เร่งความเร็ว WordPress

Nginx FastCGI Cache คืออะไร

Nginx FastCGI Cache คือระบบ cache ที่ทำงานภายใน Nginx web server โดยเก็บ response จาก PHP-FPM (FastCGI Process Manager) ไว้ในรูปแบบไฟล์บน disk หรือ memory เมื่อมี request ครั้งถัดไปสำหรับ URL เดิม Nginx จะตอบกลับด้วยไฟล์ที่ cache ไว้ทันที โดยไม่ต้องเรียก PHP-FPM หรือ MySQL เลย

หลักการทำงาน: Browser → Nginx → ตรวจสอบ Cache → HIT: ส่งไฟล์ cache ทันที / MISS: ส่งต่อไปยัง PHP-FPM → WordPress → MySQL → บันทึก cache → ส่งกลับ Browser

FastCGI Cache เป็นฟีเจอร์ที่ฝังอยู่ใน Nginx ตั้งแต่ version 0.7.48 ไม่ต้องติดตั้ง module เพิ่มเติม และรองรับ WordPress ได้อย่างสมบูรณ์เมื่อตั้งค่าอย่างถูกต้อง

ทำไมต้องใช้ FastCGI Cache กับ WordPress

WordPress เป็น CMS ที่ dynamic โดยธรรมชาติ ทุก request ต้องผ่าน PHP และ MySQL ซึ่งใช้ทรัพยากรสูงมาก โดยเฉพาะเว็บที่มี traffic หนาแน่น FastCGI Cache แก้ปัญหานี้ได้อย่างตรงจุด

ตัวชี้วัดก่อนใช้ Cacheหลังใช้ FastCGI Cache
TTFB (Time to First Byte)200–800 ms5–30 ms
Requests per second30–1001,000–5,000+
CPU usage ขณะ traffic peak80–100%5–20%
Memory usageสูง (PHP workers)ต่ำมาก
Database queries/req10–50 queries0 queries (cache HIT)
เหมาะกับ: เว็บที่มี static content เยอะ เช่น บล็อก, สื่อข่าว, พอร์ตโฟลิโอ, landing page อาจไม่เหมาะกับเว็บที่ต้องการ real-time data เช่น stock ticker หรือแชทสด

ความต้องการระบบก่อนเริ่ม

ก่อนเริ่มตั้งค่า FastCGI Cache ควรตรวจสอบว่าระบบพร้อมดังนี้:

ตรวจสอบ Nginx และ PHP-FPM version
nginx -v
php-fpm8.1 -v
systemctl status nginx php8.1-fpm

ตั้งค่า fastcgi_cache_path

ขั้นตอนแรกคือกำหนด cache zone ใน Nginx configuration หลัก โดยเพิ่มใน block http {} ของไฟล์ /etc/nginx/nginx.conf

1เพิ่ม fastcgi_cache_path ใน nginx.conf
sudo nano /etc/nginx/nginx.conf

เพิ่มบรรทัดนี้ภายใน http { } block:

fastcgi_cache_path /var/cache/nginx
    levels=1:2
    keys_zone=WORDPRESS:100m
    inactive=60m
    max_size=1g;

fastcgi_cache_key "$scheme$request_method$host$request_uri";

คำอธิบายตัวเลือกสำคัญ:

Optionค่าความหมาย
levels=1:21:2โครงสร้างไดเรกทอรีย่อยเพื่อกระจาย inode
keys_zoneWORDPRESS:100mชื่อ zone และขนาด memory สำหรับเก็บ keys (100 MB รองรับ ~800,000 keys)
inactive60mลบ cache entry ที่ไม่ถูกเรียกใน 60 นาที
max_size1gขนาดสูงสุดของ cache ทั้งหมดบน disk
2สร้างโฟลเดอร์สำหรับ cache
sudo mkdir -p /var/cache/nginx
sudo chown www-data:www-data /var/cache/nginx

ตั้งค่า Virtual Host สำหรับ WordPress

แก้ไขไฟล์ virtual host ของเว็บไซต์ WordPress (ปกติอยู่ที่ /etc/nginx/sites-available/yoursite.com)

3ตัวอย่าง Nginx config ครบสมบูรณ์สำหรับ WordPress + FastCGI Cache
server {
    listen 80;
    listen [::]:80;
    server_name yoursite.com www.yoursite.com;
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;
    server_name yoursite.com www.yoursite.com;

    root /var/www/yoursite.com/public;
    index index.php;

    ssl_certificate /etc/letsencrypt/live/yoursite.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/yoursite.com/privkey.pem;

    # FastCGI Cache Settings
    set $skip_cache 0;

    # Skip cache สำหรับ POST requests
    if ($request_method = POST) { set $skip_cache 1; }

    # Skip cache สำหรับ URL ที่มี query string
    if ($query_string != "") { set $skip_cache 1; }

    # Skip cache สำหรับ URL พิเศษของ WordPress
    if ($request_uri ~* "/wp-admin/|/xmlrpc.php|wp-.*.php|/feed/|index.php|sitemap(_index)?.xml") {
        set $skip_cache 1;
    }

    # Skip cache สำหรับ logged-in users และ WooCommerce
    if ($http_cookie ~* "comment_author|wordpress_[a-f0-9]+|wp-postpass|wordpress_no_cache|wordpress_logged_in|woocommerce_items_in_cart|woocommerce_cart_hash") {
        set $skip_cache 1;
    }

    location / {
        try_files $uri $uri/ /index.php?$args;
    }

    location ~ \.php$ {
        include fastcgi_params;
        fastcgi_pass unix:/run/php/php8.1-fpm.sock;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

        # เปิดใช้ FastCGI Cache
        fastcgi_cache WORDPRESS;
        fastcgi_cache_valid 200 301 302 60m;
        fastcgi_cache_use_stale error timeout invalid_header http_500;
        fastcgi_ignore_headers Cache-Control Expires Set-Cookie;
        fastcgi_cache_bypass $skip_cache;
        fastcgi_no_cache $skip_cache;

        # Header บอกสถานะ cache
        add_header X-Cache $upstream_cache_status;
    }

    location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg|woff|woff2)$ {
        expires 1y;
        add_header Cache-Control "public, immutable";
        access_log off;
    }
}

ตั้งค่า bypass cache ให้ถูกต้อง

การ bypass cache ที่ถูกต้องเป็นกุญแจสำคัญของการตั้งค่า FastCGI Cache ที่ปลอดภัยและถูกต้อง

กฎ bypass cache ที่สำคัญ: ผู้ใช้ที่ login, cart ของ WooCommerce, หน้า checkout, หน้า admin และ POST requests ทั้งหมดต้องข้าม cache เสมอ
เงื่อนไขskip_cacheเหตุผล
POST request1 (bypass)ข้อมูลฟอร์ม ต้องประมวลผลจริง
มี query string1 (bypass)อาจเป็น pagination, filter
wp-admin/1 (bypass)หน้า admin ต้อง real-time เสมอ
Cookie: logged_in1 (bypass)User login ต้องเห็น content จริง
Cookie: woo_cart1 (bypass)Cart อาจเปลี่ยนแปลงได้
GET request ปกติ0 (cache)ผู้เยี่ยมชมทั่วไป ใช้ cache ได้

ทดสอบและตรวจสอบ Cache

4ทดสอบ Nginx config และ restart
sudo nginx -t
sudo systemctl reload nginx
5ตรวจสอบ Cache HIT/MISS ด้วย curl
# Request แรก: ควรได้ MISS (PHP ยังประมวลผลจริง)
curl -I https://yoursite.com/ | grep X-Cache

# Request ที่สอง: ควรได้ HIT (โหลดจาก cache)
curl -I https://yoursite.com/ | grep X-Cache

ผลลัพธ์ที่ถูกต้อง:

X-Cache: MISS   ← request แรก
X-Cache: HIT    ← request ที่สองเป็นต้นไป
6ตรวจสอบไฟล์ cache บน disk
ls -la /var/cache/nginx/
du -sh /var/cache/nginx/

ล้าง Cache อัตโนมัติด้วย Nginx Helper

เพื่อให้เว็บแสดงเนื้อหาล่าสุดหลังอัพเดตโพสต์หรือ comment แนะนำติดตั้ง plugin Nginx Helper บน WordPress

7ติดตั้งและตั้งค่า Nginx Helper Plugin
  1. ติดตั้ง plugin Nginx Helper จาก WordPress Plugin Directory
  2. ไปที่ Settings → Nginx Helper
  3. เปิดใช้ Enable Purge
  4. เลือก Delete local server cache files
  5. กำหนด Cache Path เป็น /var/cache/nginx/
  6. เลือกเหตุการณ์ที่ต้องการล้าง cache เช่น: โพสต์ใหม่, แก้ไขโพสต์, comment ใหม่
ล้าง cache ด้วย command line: ถ้าต้องการล้าง cache ทั้งหมดทันที ใช้คำสั่ง sudo find /var/cache/nginx -type f -delete

เปรียบเทียบ FastCGI Cache vs วิธีอื่น

มีหลายวิธีในการทำ cache สำหรับ WordPress แต่ละวิธีมีข้อดีข้อเสียต่างกัน:

วิธี Cacheความเร็วความยากต้นทุนเหมาะกับ
FastCGI Cache⚡⚡⚡⚡⚡ปานกลางฟรีVPS ทุกขนาด
W3 Total Cache⚡⚡⚡ง่ายฟรี/ProShared hosting
WP Rocket⚡⚡⚡⚡ง่ายมาก$59/ปีผู้เริ่มต้น
Redis Object Cache⚡⚡⚡⚡ปานกลางฟรีเสริม FastCGI
Varnish Cache⚡⚡⚡⚡⚡ยากฟรีTraffic สูงมาก
แนะนำ: ใช้ FastCGI Cache เป็นหลัก และเพิ่ม Redis Object Cache สำหรับ database query cache จะทำให้เว็บเร็วขึ้นอีกระดับหนึ่ง

แก้ไขปัญหาที่พบบ่อย

ปัญหา: X-Cache ขึ้น MISS ทุก request

สาเหตุที่พบบ่อย: browser ส่ง cookie ที่ trigger bypass cache อยู่เสมอ ตรวจสอบด้วย:

curl -s -D - https://yoursite.com/ -o /dev/null | grep -E "X-Cache|Set-Cookie"

ถ้าเห็น Set-Cookie จากหน้าปกติ ให้เพิ่ม fastcgi_ignore_headers Set-Cookie; ใน location block

ปัญหา: เว็บแสดงเนื้อหาเก่าหลังอัพเดต

ล้าง cache ด้วย Nginx Helper หรือใช้คำสั่ง:

sudo find /var/cache/nginx -type f -delete
sudo systemctl reload nginx

ปัญหา: WooCommerce cart แสดงสินค้าผิด

ตรวจสอบว่ามี bypass rule สำหรับ WooCommerce cookies ครบแล้ว โดยเฉพาะ woocommerce_items_in_cart และ woocommerce_cart_hash

ปัญหา: หน้า admin โหลดข้อมูลเก่า

ตรวจสอบว่า /wp-admin/ อยู่ใน skip_cache rule แล้ว และรันคำสั่ง:

grep -n "skip_cache" /etc/nginx/sites-available/yoursite.com

สรุป

สิ่งที่ต้องทำเพื่อตั้งค่า Nginx FastCGI Cache

  • เพิ่ม fastcgi_cache_path ใน nginx.conf
  • ตั้งค่า virtual host พร้อม bypass rules ที่ครบถ้วน
  • สร้าง cache directory และให้สิทธิ์ที่ถูกต้อง
  • ทดสอบด้วย curl ตรวจสอบ X-Cache: HIT
  • ติดตั้ง Nginx Helper plugin สำหรับ auto-purge
  • monitor ขนาด cache ด้วย du -sh /var/cache/nginx/

Nginx FastCGI Cache เป็นหนึ่งในวิธีที่คุ้มค่าที่สุดในการเพิ่มความเร็วเว็บ WordPress บน VPS เพราะไม่มีค่าใช้จ่ายเพิ่มเติม ตั้งค่าครั้งเดียวใช้ได้นาน และสามารถลด TTFB จาก 500ms เหลือเพียง 10ms ได้จริงในสภาพแวดล้อมจริง

ต้องการ VPS สำหรับรัน Nginx + WordPress?

AsiaGB VPS ไทย SSD ความเร็วสูง พร้อม Nginx พร้อมใช้งาน Uptime 99% ดูแลระบบตลอด 24 ชั่วโมง

ดู VPS Package →

คำถามที่พบบ่อย (FAQ)

Nginx FastCGI Cache ต่างจาก plugin cache ของ WordPress อย่างไร?

FastCGI Cache ทำงานระดับ server ก่อนที่ PHP จะทำงาน ทำให้เร็วกว่า plugin cache มาก เพราะไม่ต้องโหลด WordPress, PHP หรือ query database เลย ส่วน plugin cache เช่น W3 Total Cache ยังต้องโหลด PHP engine ก่อน

FastCGI Cache จะทำให้หน้าเว็บแสดงข้อมูลเก่าหรือเปล่า?

ไม่ถ้าตั้งค่าถูกต้อง cache จะหมดอายุตามเวลาที่กำหนด และสามารถตั้งให้ล้าง cache อัตโนมัติเมื่อมีการอัพเดตโพสต์ผ่าน plugin Nginx Helper

VPS ขนาดไหนถึงเหมาะกับการตั้งค่า FastCGI Cache?

VPS ทุกขนาดใช้ได้ แม้แต่ RAM 1 GB แต่ถ้ามีปริมาณ traffic สูงหรือเว็บ WordPress มีเนื้อหาเยอะ แนะนำ RAM 2 GB ขึ้นไป

ผู้ใช้ที่ login อยู่จะได้รับ cached page หรือเปล่า?

ถ้าตั้งค่าถูกต้อง ผู้ใช้ที่ login จะ bypass cache โดยอัตโนมัติ โดยตรวจจาก cookie เช่น wordpress_logged_in_*

จะรู้ได้อย่างไรว่าหน้าเว็บโหลดมาจาก cache หรือ PHP?

ดูได้จาก HTTP response header ชื่อ X-Cache ถ้าเห็น HIT = มาจาก cache, MISS = PHP ประมวลผลจริง ใช้คำสั่ง curl -I https://yoursite.com

FastCGI Cache ทำงานร่วมกับ WooCommerce ได้ไหม?

ได้ครับ แต่ต้องตั้งค่า bypass cache สำหรับหน้า cart, checkout และผู้ใช้ที่ login เพื่อให้ราคาและสถานะ cart ถูกต้องเสมอ