Nginx

FastCGI Cache ใน Nginx

FastCGI Cache เป็นหนึ่งในเทคนิคการจัดการแคชที่มีประสิทธิภาพสูงสุดสำหรับเซิร์ฟเวอร์ Nginx โดยเฉพาะอย่างยิ่งเมื่อใช้งานร่วมกับ PHP-FPM และแอปพลิเคชัน WordPress การนำเทคนิค FastCGI Cache มาใช้งานช่วยลดการประมวลผล PHP และฐานข้อมูล ทำให้เวลาโหลดหน้าเว็บเร็วขึ้นอย่างมีนัยสำคัญ และเพิ่มความสามารถในการรองรับผู้เข้าชมจำนวนมากในเวลาเดียวกัน

บทความนี้จะอธิบายรายละเอียดเกี่ยวกับการตั้งค่า FastCGI Cache ใน Nginx พร้อมตัวอย่างการกำหนดค่าแบบปฏิบัติการ วิธีการข้ามแคชสำหรับผู้ใช้ที่เข้าสู่ระบบ และวิธีการล้างแคช เพื่อให้ได้ประสิทธิภาพสูงสุดในการจัดหน่วยงานเว็บของคุณ

FastCGI Cache คืออะไร

FastCGI Cache เป็นชั้นการจัดเก็บข้อมูลที่ตั้งอยู่ระหว่าง Nginx และ PHP-FPM ซึ่งทำหน้าที่เก็บผลลัพธ์ของการประมวลผล PHP ไว้ในหน่วยความจำชั่วคราว (temporary storage) เมื่อผู้ใช้เข้าเยี่ยมชมหน้าเดียวกัน Nginx จะส่งผลลัพธ์ที่เก็บไว้แล้วแทนการเรียกไป PHP-FPM ซ้ำหลายครั้ง

ความแตกต่างที่สำคัญระหว่าง FastCGI Cache และการจัดเก็บข้อมูลแบบอื่น ๆ คือ FastCGI Cache ทำการจัดเก็บข้อมูลที่ระดับ HTTP response ซึ่งใกล้เคียงกับการจัดเก็บข้อมูลจริง แต่มีความยืดหยุ่นมากกว่า เนื่องจาก Nginx สามารถกำหนดเงื่อนไขในการข้ามแคชได้ โดยไม่จำเป็นต้องแก้ไขโค้ด PHP เลย

ทำไมต้องใช้ FastCGI Cache กับ PHP-FPM และ WordPress

WordPress เป็นแอปพลิเคชันที่ใช้ฐานข้อมูลมาก โดยเพียงการโหลดหน้าเดียว อาจจำเป็นต้องค้นหาข้อมูลจากฐานข้อมูลหลายสิบครั้ง หากไม่มีการจัดเก็บข้อมูล ปัญหาเหล่านี้จะเกิดขึ้น:

  • CPU usage สูง: PHP ต้องประมวลผลโค้ด WordPress ซ้ำ ๆ สำหรับแต่ละการเรียกใช้
  • Database queries มากเกินไป: ฐานข้อมูลต้องตอบสนองต่อการค้นหาจำนวนมาก ซึ่งช่วงเวลาติดขัด
  • เวลาโหลดหน้านาน: ผู้ใช้ต้องรอการประมวลผล ซึ่งส่งผลต่อประสบการณ์การใช้งาน
  • Scalability ต่ำ: เซิร์ฟเวอร์ไม่สามารถรองรับผู้เข้าชมจำนวนมากได้ในเวลาเดียวกัน

เมื่อใช้ FastCGI Cache จะทำให้ Nginx ตอบสนองการขอ HTTP โดยตรง โดยไม่ต้องขอ PHP-FPM ทุกครั้ง ผลลัพธ์คือ:

  • ลดการใช้ CPU ของ PHP-FPM ถึง 70-80%
  • ลดจำนวน database queries
  • เพิ่มความเร็วในการตอบสนอง (response time) เป็น 100-500ms เร็วขึ้น
  • รองรับผู้เข้าชมจำนวนมากได้ดีขึ้น

ข้อมูลเบื้องต้นที่จำเป็น

ก่อนตั้งค่า FastCGI Cache ต้องมีสิ่งต่อไปนี้:

  • เซิร์ฟเวอร์ที่มี Nginx และ PHP-FPM ติดตั้งอยู่ (Cloud VPS หรือ Cloud Hosting ของ DE ก็ได้)
  • สิทธิ์ในการแก้ไขไฟล์ config ของ Nginx
  • ความเข้าใจพื้นฐานเกี่ยวกับ HTTP headers และ caching concepts
  • WordPress (หรือแอปพลิเคชัน PHP อื่น ๆ)

การตั้งค่า FastCGI Cache ใน Nginx

ขั้นตอนการตั้งค่า FastCGI Cache ประกอบด้วยสองส่วนหลัก: กำหนด cache zone ใน http block และปิดใช้งานแคชสำหรับกรณีเฉพาะ

ขั้นตอนที่ 1: กำหนด Cache Zone

เพิ่มคำสั่งต่อไปนี้ใน http block ของ /etc/nginx/nginx.conf:

http {
    # กำหนด cache zone
    fastcgi_cache_path /var/run/nginx-cache levels=1:2 keys_zone=wordpress:100m max_size=1g inactive=60m use_temp_path=off;

    # กำหนด cache key
    fastcgi_cache_key "$scheme$request_method$host$request_uri";

    # ...

การอธิบายแต่ละตัวเลือก:

  • fastcgi_cache_path: ตำแหน่งที่จัดเก็บแคช (ต้องมี permission write)
  • levels=1:2: โครงสร้าง directory ที่ใช้จัดเก็บ (1 ตัวอักษร + 2 ตัวอักษร)
  • keys_zone=wordpress:100m: ชื่อ zone และขนาดหน่วยความจำ (100MB)
  • max_size=1g: ขนาด cache maximum
  • inactive=60m: ลบแคชที่ไม่ใช้มา 60 นาที
  • use_temp_path=off: ไม่ใช้ temp path สำหรับการเขียนแคช (เร็วกว่า)

ขั้นตอนที่ 2: เพิ่ม FastCGI Cache ใน Server Block

เพิ่มคำสั่งเหล่านี้ใน server block ที่จัดการ domain ของคุณ:

server {
    listen 80;
    server_name example.com www.example.com;
    root /home/user/public_html;

    # เปิดใช้งาน FastCGI Cache
    location ~ \.php$ {
        fastcgi_cache wordpress;  # ใช้ zone ที่กำหนดไว้
        fastcgi_cache_valid 200 60m;  # แคชสำเร็จใน 60 นาที
        fastcgi_cache_valid 404 5m;   # แคช error 404 ใน 5 นาที
        fastcgi_cache_bypass $skip_cache;
        fastcgi_no_cache $skip_cache;

        fastcgi_pass 127.0.0.1:9000;  # PHP-FPM port
        fastcgi_index index.php;
        include fastcgi_params;
    }
}

ขั้นตอนที่ 3: ข้ามแคชสำหรับผู้ใช้ที่เข้าสู่ระบบ

เพิ่มคำสั่งนี้ใน server block เพื่อข้ามแคชเมื่อผู้ใช้เข้าสู่ระบบ:

server {
    # ...

    # ข้ามแคชสำหรับผู้ใช้ที่เข้าสู่ระบบ
    set $skip_cache 0;

    # ข้ามแคช: POST requests
    if ($request_method = POST) {
        set $skip_cache 1;
    }

    # ข้ามแคช: มี query string
    if ($query_string != "") {
        set $skip_cache 1;
    }

    # ข้ามแคช: cookie wordpress_logged_in มีอยู่
    if ($http_cookie ~* "wordpress_logged_in") {
        set $skip_cache 1;
    }

    # ข้ามแคช: WordPress admin pages
    if ($request_uri ~* "wp-login|wp-admin") {
        set $skip_cache 1;
    }
}

การทดสอบการตั้งค่า

หลังตั้งค่าเสร็จแล้ว ให้ทดสอบการทำงานด้วยคำสั่งต่อไปนี้:

1. ตรวจสอบ config syntax:

nginx -t

2. Reload Nginx:

systemctl reload nginx

3. ตรวจสอบสถานะแคช:

curl -I http://example.com/index.php
X-Cache-Status: HIT

ถ้าได้ X-Cache-Status: HIT แสดงว่าแคชทำงานแล้ว (ต้องเพิ่ม header นี้ด้วยเอง)

วิธีการล้างแคช

บางครั้งจำเป็นต้องล้างแคช เช่น เมื่อมีการอัปเดต WordPress หรือเปลี่ยนแปลง theme:

วิธีที่ 1: ล้างแคชทั้งหมด

rm -rf /var/run/nginx-cache/*
systemctl reload nginx

วิธีที่ 2: ล้างแคชด้วย WordPress Plugin

ติดตั้ง plugin เช่น “Nginx Cache” และสามารถล้างแคชจาก WordPress dashboard ได้เลย

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

ปัญหา: แคชไม่ทำงาน

สาเหตุที่อาจเกิดขึ้น:

  • ไดเรกทอรี่ /var/run/nginx-cache ไม่มีอยู่ → สร้างด้วย mkdir -p /var/run/nginx-cache
  • Permission ไม่ถูกต้อง → เปลี่ยนให้ nginx user สามารถเขียนได้
  • PHP-FPM ส่ง Set-Cookie header ให้ทุกครั้ง → แคชจะข้ามไป

ปัญหา: Content ไม่อัปเดต

ล้างแคช และตรวจสอบว่า inactive time ตั้งค่าตามความเหมาะสม

ปัญหา: Memory usage สูง

ลดค่า keys_zone และ max_size ลง เช่น keys_zone=wordpress:50m max_size=500m

ความสัมพันธ์กับ Cloud Hosting และ Cloud VPS ของ DE

FastCGI Cache เหมาะสมสำหรับลูกค้า Cloud VPS และ Cloud Hosting ของ DE ที่ต้องการ:

  • ลดต้นทุนการใช้ CPU และ memory
  • เพิ่มความเร็วของเว็บไซต์
  • รองรับจำนวนผู้เข้าชมมากขึ้น
  • เมื่อคุณไม่สามารถใช้ plugin cache เช่น WP Super Cache ได้

สรุป

FastCGI Cache เป็นเทคนิคที่มีประสิทธิภาพและมีขอบเขตการใช้งานกว้างมาก ไม่ว่าจะเป็นสำหรับ WordPress หรือแอปพลิเคชัน PHP อื่น ๆ โดยเฉพาะอย่างยิ่ง เมื่อต้องการลดการใช้ resources และเพิ่มความเร็ว วิธีการตั้งค่าไม่ซับซ้อน และสามารถประยุกต์ใช้ได้กับหลายสถานการณ์

หากคุณเป็นลูกค้า Cloud VPS หรือ Cloud Hosting ของ DE สามารถสอบถามทีมสนับสนุนเกี่ยวกับวิธีการตั้งค่า FastCGI Cache ได้

แนะนำบริการ DE

หากคุณกำลังมองหา Cloud VPS หรือ Cloud Hosting ที่มีประสิทธิภาพและรองรับการตั้งค่า FastCGI Cache ได้อย่างเต็มที่ DE (Dot Enterprise Co., Ltd.) เสนอบริการต่อไปนี้:

  • Cloud VPS: บริการเซิร์ฟเวอร์เสมือน (Virtual Private Server) ที่ให้คุณสามารถติดตั้ง Nginx และตั้งค่า FastCGI Cache ได้อย่างปลอดภัย
  • Cloud Hosting: บริการโฮสติ้งคลาวด์ที่พร้อมใช้งาน พร้อมด้วย PHP-FPM และ Nginx ตั้งค่าแล้ว

ติดต่อ https://de.co.th เพื่อได้รับข้อมูลเพิ่มเติมและราคา