Bài 7: Cài đặt FastCGI Cache cho VPS chạy Centmin Mod

Hướng dẫn bật Nginx FastCGI Cache toàn cục trên Centmin Mod giúp giảm TTFB xuống dưới 50ms

Khi vận hành website WordPress trên VPS Centmin Mod (ngay cả tại các location như Singapore về Việt Nam), chỉ số TTFB (Time to First Byte) mặc định thường bị kéo dài từ 1.5s – 2.0s do máy chủ phải xử lý script PHP và truy vấn MySQL cho mỗi lượt tải trang. Việc kích hoạt Nginx FastCGI Cache là giải pháp tối ưu nhất để trả thẳng bản tĩnh HTML từ bộ nhớ, giúp tốc độ phản hồi máy chủ đạt mức tức thì (< 50ms).

Bài viết này sẽ hướng dẫn bạn cấu hình Nginx FastCGI Cache toàn cục bền vững: Áp dụng tự động cho tất cả website hiện có lẫn web cài mới sau này, đồng thời không lo bị mất cấu hình khi cập nhật PHP hoặc Centmin Mod.

Bài 7: Cài đặt FastCGI Cache cho VPS chạy Centmin Mod
Bài 7: Cài đặt FastCGI Cache cho VPS chạy Centmin Mod

Bước 1: Khai báo vùng nhớ FastCGI Cache trong file cấu hình Nginx chính

Đầu tiên, chúng ta cần khai báo đường dẫn lưu trữ cache và định dạng cache key trong block http { ... } của Nginx.

Mở file nginx.conf chính:

nano /usr/local/nginx/conf/nginx.conf

Tìm đến block http { ... }, giữ nguyên các cấu hình cũ và chèn thêm 2 dòng khai báo bộ nhớ cache dưới đây vào ngay bên trong:

http {
    ...
    # Khai bao bo nho FastCGI Cache
    fastcgi_cache_path /tmp/wpcache levels=1:2 keys_zone=wpbox:100m max_size=1g inactive=60m;
    fastcgi_cache_key "$scheme$request_method$host$request_uri";
    ...
}

Lưu lại bằng Ctrl + OEnterCtrl + X để thoát.


Bước 2: Tạo bộ quy tắc loại trừ Cache cho WordPress (wpcache.conf)

Chúng ta cần chặn cache đối với các trang quản trị wp-admin, trang đăng nhập, giỏ hàng WooCommerce, REST API (wp-json) và người dùng đã đăng nhập để tránh gây lỗi không thể cập nhật bài viết.

Tạo file wpcache.conf:

nano /usr/local/nginx/conf/wpcache.conf

Dán toàn bộ nội dung quy tắc chuẩn dưới đây vào file:

# Cấu hình bỏ qua Cache cho WordPress
set $no_cache 0;

# Không cache các request POST
if ($request_method = POST) {
    set $no_cache 1;
}

# Không cache nếu có Query String (trừ trường hợp tùy chỉnh)
if ($query_string != "") {
    set $no_cache 1;
}

# Không cache các trang Admin, REST API, Login, Cart, Checkout, Sitemap
if ($request_uri ~* "/(wp-admin/|wp-json/|xmlrpc.php|wp-login.php|dashboard/|me/|account/|cart/|checkout/|wp-comments-post.php|feed/|sitemap.*\.xml)") {
    set $no_cache 1;
}

# Chỉ KHÔNG cache cho người dùng ĐÃ ĐĂNG NHẬP ADMIN
if ($http_cookie ~* "wordpress_logged_in_") {
    set $no_cache 1;
}

Bước 3: Tạo cấu hình FastCGI Cache toàn cục không lo bị ghi đè khi Update

Để tránh trường hợp Centmin Mod cập nhật lại file php.conf mặc định và làm mất các dòng lệnh cache, chúng ta tạo một file tùy chỉnh tên là php-custom.conf.

Tạo file php-custom.conf:

nano /usr/local/nginx/conf/php-custom.conf

Dán đoạn code nạp bộ quy tắc và kích hoạt FastCGI Cache vào file:

# Include quy tắc loại trừ cache
include /usr/local/nginx/conf/wpcache.conf;

# Cấu hình FastCGI Cache
fastcgi_cache wpbox;
fastcgi_cache_bypass $no_cache;
fastcgi_no_cache $no_cache;
fastcgi_cache_valid 200 301 302 60m;
fastcgi_cache_use_stale error timeout updating invalid_header http_500 http_503;

# Header kiểm tra trạng thái cache
add_header X-Cache $upstream_cache_status;

Bước 4: Nhúng cấu hình Custom vào hệ thống PHP của Centmin Mod

Để mọi vhost trên VPS (cả HTTP và HTTPS, web cũ lẫn web cài mới sau này) tự động nhận diện cache, ta mở file php.conf hệ thống:

nano /usr/local/nginx/conf/php.conf

Tìm đến block location ~ \.php$ { ... } và chèn dòng include php-custom.conf vào ngay dòng đầu tiên bên trong block đó:

location ~ \.php$ {
    include /usr/local/nginx/conf/php-custom.conf;
    ...
}

Bước 5: Kiểm tra cú pháp và khởi động lại Nginx

Tạo thư mục lưu cache trên đĩa cứng và kiểm tra cú pháp cấu hình Nginx:

mkdir -p /tmp/wpcache
chown -R nginx:nginx /tmp/wpcache
nginx -t && systemctl reload nginx

Nếu màn hình hiển thị syntax is oktest is successful, hệ thống đã nạp thành công!


Bước 6: Kiểm tra kết quả hoạt động của Cache & Đo tốc độ TTFB

Thực hiện gửi request kiểm tra trạng thái header X-Cache trên tên miền của bạn bằng câu lệnh cURL:

# Lần 1 (Tạo bản cache mới - mong đợi kết quả: MISS hoặc BYPASS)
curl -sI https://tenmien-cuaban.com | grep -i x-cache

# Lần 2 (Đọc bản cache - mong đợi kết quả: HIT)
curl -sI https://tenmien-cuaban.com | grep -i x-cache

Khi kết quả trả về x-cache: HIT, hãy chạy câu lệnh dưới đây để đo lại chi tiết bảng thời gian phản hồi máy chủ:

curl -s -w "\n--- BẢNG THỜI GIAN ---\nDNS Lookup:       %{time_namelookup}s\nConnect (TCP):    %{time_connect}s\nSSL Handshake:    %{time_appconnect}s\nTTFB (Máy chủ phản hồi): %{time_starttransfer}s\nTotal Time:       %{time_total}s\n" -o /dev/null https://tenmien-cuaban.com

Kết quả mong đợi: Chỉ số TTFB (time_starttransfer) sẽ giảm từ 1.5s – 1.8s xuống chỉ còn 0.03s – 0.05s (30ms – 50ms).


Bước 7: Cơ chế tự động dọn dẹp Cache khi đăng bài mới

Khi FastCGI Cache hoạt động, Nginx sẽ lưu bản tĩnh của website trong 60 phút. Để các thay đổi (viết bài mới, chỉnh sửa giao diện, sửa nội dung) cập nhật ngay lập tức ra ngoài trang chủ, bạn có 2 lựa chọn:

  • Cách 1 (Tự động): Cài đặt plugin Nginx Helper trên trang Admin WordPress. Вật Enable Purge, chọn Nginx FastCGI cache, Purge Method chọn nginx Unlink File và nhập Cache Path là /tmp/wpcache.
  • Cách 2 (Thủ công): Khi nào chỉnh sửa nội dung xong, lên terminal chạy duy nhất 1 dòng lệnh dọn sạch thư mục cache:
    rm -rf /tmp/wpcache/*

Để lại một bình luận

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *