Một trong những lỗi phổ biến khiến Cloudflare không thể lưu cache trang web (luôn trả về trạng thái REVALIDATED hoặc EXPIRED thay vì HIT) là do sự tồn tại của tiêu đề Cache-Control: no-cache từ máy chủ gốc. Bài viết này sẽ hướng dẫn bạn cách chẩn đoán chi tiết và khắc phục triệt để lỗi này trên hệ thống sử dụng Nginx làm Reverse Proxy đứng trước OpenLiteSpeed.
1. Triệu chứng của lỗi
Khi bạn kiểm tra Response Headers của website hoặc các file tĩnh (như CSS, JS, hình ảnh) bằng lệnh curl hoặc Công cụ nhà phát triển (F12) trên trình duyệt, bạn thấy các tiêu đề sau xuất hiện đồng thời:
Cache-Control: public, max-age=2592000
Cache-Control: no-cache
Cf-Cache-Status: EXPIRED (hoặc REVALIDATED)Sự xuất hiện đồng thời của hai tiêu đề Cache-Control trái ngược nhau khiến Cloudflare bối rối. Tiêu đề no-cache bắt buộc Cloudflare phải gửi yêu cầu kiểm tra lại (revalidate) với máy chủ gốc mỗi lần có lượt truy cập, làm tăng thời gian phản hồi (TTFB) và gây quá tải cho máy chủ gốc của bạn.
2. Quá trình chẩn đoán và xác định nguyên nhân
Để giải quyết triệt để lỗi này, chúng ta cần đi qua các bước cô lập nguyên nhân:
- Bước 1: Kiểm tra Plugin và .htaccess: Nhiều người thường nghĩ lỗi do các plugin cache của WordPress (như LiteSpeed Cache) hoặc file
.htaccess. Tuy nhiên, nếu bạn dùng OpenLiteSpeed, nó thường bỏ qua các cấu hình header (nhưmod_headers) trong file.htaccess. - Bước 2: Kiểm tra trực tiếp IP Máy chủ gốc (Origin IP): Chạy lệnh curl trực tiếp đến IP máy chủ gốc (bypass Cloudflare) để xem tiêu đề nào được tạo ra tại máy chủ:
curl -I -k -H "Host: yourdomain.com" https://[SERVER_IP]/wp-includes/css/dist/block-library/style.min.cssNếu tiêu đề
Server: nginxxuất hiện cùng vớix-turbo-charged-by: LiteSpeed, hệ thống của bạn chắc chắn đang chạy mô hình Nginx làm Reverse Proxy đứng trước OpenLiteSpeed.
3. Cách xử lý triệt để
Bước 1: Loại bỏ dòng cấu hình cứng trong Nginx
Khi cấu hình Reverse Proxy trên các control panel như aaPanel, hệ thống thường tự động thêm dòng ngăn lưu cache ở Nginx để tránh lỗi dữ liệu động cho các ứng dụng Node.js/Python. Bạn cần xóa bỏ nó.
Mở file cấu hình Nginx của tên miền (thường nằm tại /www/server/panel/vhost/nginx/yourdomain.com.conf), tìm khối cấu hình location /:
location / {
proxy_pass http://127.0.0.1:8188;
...
# XÓA HOẶC COMMENT DÒNG DƯỚI ĐÂY:
# add_header Cache-Control no-cache;
}Sau đó, lưu lại và Khởi động lại Nginx (Restart Nginx).
Bước 2: Tắt Module Cache của OpenLiteSpeed (nếu dùng Cloudflare Page Cache)
Nếu bạn đang dùng các plugin như Super Page Cache for Cloudflare để quản lý cache ở Cloudflare và local disk, hãy tắt module cache của OpenLiteSpeed để tránh xung đột.
Mở cấu hình tổng của OpenLiteSpeed (httpd_config.conf) thông qua giao diện aaPanel, tìm khối module cache và sửa:
module cache {
ls_enabled 0 # Đổi từ 1 thành 0 để tắt module
...
}Lưu lại và Khởi động lại OpenLiteSpeed.
4. Kết quả sau khi xử lý
Sau khi thực hiện hai bước trên, hãy chạy lại lệnh kiểm tra. Bạn sẽ thấy chỉ còn duy nhất một tiêu đề Cache-Control hợp lệ từ WordPress/LiteSpeed gửi ra và Cloudflare sẽ trả về trạng thái HIT ngay lập tức ở các lượt truy cập sau.




