Cache Rules Cloudflare - Cache siêu cấp vô địch cho WordPress

Đoạn mở đầu chủ yếu là chém gió múa lửa, nếu bạn lười đọc thì hãy đi thẳng tới bước cấu hình

Thông thường khi nhắc về plugin cache trên WordPress, mọi người hay hiểu nó sang “kết quả”, cache là tăng tốc độ load trang và tăng khả năng chịu tải cho server, chứ hiếm ai nói theo nghĩa đen, cache là chuyển file động (php, mysql) sang file tĩnh (html) …. vấn đề nếu chỉ thế thì quá đơn giản, không ai thèm mua, các nhà lập trình viên đã nện vào thêm 1 tỷ các tính năng để chào hàng, như CDN, xử lý ảnh, defer Javascript, Remove Unused CSS, Lazy Loading, Local Google Fonts, Local Analytics, xóa các database như Post Revisions, Post Auto-Drafts …. thượng vàng hạ cám, đúng nghĩa đen là thà thừa còn hơn thiếu, tính năng này mài chê thừa, không dùng nhưng thèng khác dùng 😀

Các plugin cache bạn nghe, thấy ngoài thị trường, phần lớn giờ nó thành combo AIO, tất cả trong 1 cho việc tối ưu WordPress, hơn là thuần túy chỉ là nhiệm vụ ban đầu là cache

  • Các tay viết plugin trên PHP (cache L0), tạo cache về dạng tĩnh (html) lưu trên ổ cứng thì gáy bẩn, bản cache của bọn teo tùy biến ngon hơn, tính năng mạnh hơn, xử lý preload, xóa cache tốt hơn 😀
  • Các tay chuyên về cấu hình server thì lại khinh bỉ ra mặt, nói FastCGI, Varnish, Redis, LiteSpeed Cache (cache L1) …. mới là bố của hiệu năng chịu tải 😀 cache đéo có mịa gì mà chúng mài bán mấy chục $ 1 năm cho license 😀

2 quan điểm trên, từ 2 nhóm đối tượng khác nhau, mình đều rất đồng tình, vì họ nói không hề sai, chỉ nói thiếu thôi 😀 kiểu ưu họ nói rõ, nhưng khuyết thì họ chẳng thèm nhắc 😀

Vấn đề hết sức mệt của đám FastCGI (L1), là việc cấu hình rất phiền, rất dễ cache nhầm, xóa cache cũng chua, vì xóa là xóa hết, không có khái niệm xóa theo trang riêng biệt hay rule tùy chỉnh, trang nào tương tác nhiều, là cứ vừa tạo cache, vừa xóa cache liên tục, mất hẳn ý nghĩa của việc cache, góc độ người dùng cuối mình vẫn bảo lưu quan điểm, dùng các plugins cache chạy PHP đang có ngoài thị trường đã quá đủ, tính năng, quản trị, cấu hình dễ dàng, gặp vấn đề gì thì hãng hoặc người bán support tận răng, hiệu năng rất tốt

Chưa kể chúng ta có thể kết hợp L0 + L1, tận dụng điểm mạnh và hạn chế khuyết điểm của 2 hình thức này (WP Rocket và Rocket-Nginx chẳng hạn)

Sau này, theo sự phát triển, chúng ta phổ cập, biết tới hình thức cache L2 (Edge Caching CDN), xưa giờ file cache chỉ nằm trên hosting gốc (có thể trong ổ đĩa hoặc RAM), sang L2, file cache sau khi tạo xong, được chuyển tới tất cả các cụm location, nhờ thế, khách truy cập trên toàn thế giới, đều được lợi về tốc độ, sự chịu tải cũng nâng tầm hẳn lên, không ngán bố con thèng nào 😀

Trước đây việc cache qua Cloudflare rất phức tạp, ơn trời là tới 2022, Cloudflare đã bổ xung tính năng Cache Rules, nhờ thế chúng ta đã có thể kiểm soát mọi thứ đơn giản hơn

Đây là là bài viết mình duy trì về cache qua Cloudflare, do mình đang sử dụng hình thức này 😀 cơ bản bài này bao gồm 3 phần

1. Xử lý cache hoặc không cache qua Cloudflare Cache Rules

  • Mặc định sẽ cache tất cả trang, bypass các rule theo URI Path, URI Query String, Cookie, Extensions

2. Xóa cache qua plugin Cloudflare chính thức

  • Hoặc bạn cũng có thể dùng cách plugin khác có tính năng xóa cache Cloudflare như Super Page Cache for Cloudflare

3. Tùy chỉnh cho từng trang trên Cache Rules

Ở bài viết trước đây về Super Page Cache for Cloudflare, mình cũng từng viết qua, nhưng cách đây ít hôm vào lại hướng dẫn gốc của tác giả isaumya tại Github, thì thấy anh ấy đã cập nhập lại rule, siêu ngắn gọn, dễ hiểu và rất dễ quản lý (bản cũ anh ấy dùng 4 Cache Rules + 1 Page Rules, bản này chỉ dùng duy nhất 1 Cache Rules)

Nếu đã làm theo ở bài viết cũ, thì vào Cloudflare, tắt hết các Cache Rules, Page Rules cũ đi

2023-09-03_10-56-12

Tắt luôn Cache Level: Cache Everything, vì không dùng nữa

2023-09-03_10-59-51

Sau đó xóa hết cache Cloudflare đi

2023-09-03_11-00-51

Cấu hình Cache Rules

Truy cập vào Cache Rules -> Create new Cache Rule -> Edit Expression
Rule name (required): đặt 1 tên bất kì tùy thích 😛 SPCFC Cache Rule ➜ Cache Eligible Requests chẳng hạn

2023-09-03_11-07-05

Bên trong Use expression builder, điền vào đoạn code bên dưới (hay thế example.com bằng domain của bạn)

(http.host eq "example.com" and not starts_with(http.request.uri.path, "/wp-admin") and not starts_with(http.request.uri.path, "/wp-login") and not starts_with(http.request.uri.path, "/wp-json/") and not starts_with(http.request.uri.path, "/wc-api/") and not starts_with(http.request.uri.path, "/edd-api/") and not starts_with(http.request.uri.path, "/mepr/") and not http.request.uri.path contains "/register/" and not http.request.uri.path contains "/dashboard/" and not http.request.uri.path contains "/members-area/" and not http.request.uri.path contains "/wishlist-member/" and not http.request.uri.path contains "phs_downloads-mbr" and not http.request.uri.path contains "/checkout/" and not http.request.uri.path contains ".xsl" and not http.request.uri.path contains ".xml" and not http.request.uri.path contains ".php" and not starts_with(http.request.uri.query, "s=") and not starts_with(http.request.uri.query, "p=") and not http.request.uri.query contains "nocache" and not http.request.uri.query contains "nowprocket" and not http.cookie contains "wordpress_logged_in_" and http.cookie ne "comment_" and not http.cookie contains "woocommerce_" and not http.cookie contains "wordpressuser_" and not http.cookie contains "wordpresspass_" and not http.cookie contains "wordpress_sec_" and not http.cookie contains "yith_wcwl_products" and not http.cookie contains "edd_items_in_cart" and not http.cookie contains "it_exchange_session_" and not http.cookie contains "comment_author" and not http.cookie contains "dshack_level" and not http.cookie contains "auth_" and not http.cookie contains "noaffiliate_" and not http.cookie contains "mp_session" and not http.cookie contains "xf_" and not http.cookie contains "mp_globalcart_" and not http.cookie contains "wp-resetpass-" and not http.cookie contains "upsell_customer" and not http.cookie contains "wlmapi" and not http.cookie contains "wishlist_reg")
  • Cache status (required) -> Eligible for cache
  • Cache key (optional) ấn vào + Add
  • Bật Cache deception armor

2023-09-15_19-48-52

Xong xuôi thì ấn vào Deploy

Đây là cấu hình rất an toàn, gần như có thể chạy ổn định trên WordPress blog và Woocommerce mặc định

Cấu hình plugin Cloudflare

Download và setup như 1 plugin thông thường

2023-09-15_19-53-47

Settings -> Speed -> Bật Auto Purge Content On Update

Có 1 vĩ nhân đã từng nói, có 2 thứ trên đời này, chỉ có chúa mới hiểu 😀 1 là tại sao code viết thế lại chạy không lỗi 😛 2 là xử lý …. xóa cache 😀

Nói để thấy chuyện xóa cache nó cực kì rối rắm và phức tạp, xóa hết thì mất ý nghĩa của việc tạo cache, xóa không đủ thì rất dễ gây lỗi

Tạm mình thấy plugin Cloudflare chính thức xóa cache ổn, không hoàn hảo, nhưng đủ dùng, ít lỗi 😛

Bạn cũng có thể dùng Super Page Cache for Cloudflare để xóa cacle Cloudflare, tính năng xóa mạnh hơn, do có thêm tính năng chỉ xóa các trang, không xóa cache ở các hình ảnh đã được cache nên hiệu quả mạnh hơn, còn có thể kết hợp được với rất nhiều hình thức cache khác, chưa kể nó còn có 1 button nhỏ trên admin bar, giúp việc xóa cache thuận tiện hơn

Việc cấu hình Super Page Cache for Cloudflare ban đầu hơi nhiều, plugin Cloudflare chính thức đơn giản hơn, chỉ cần bật duy nhất 1 tùy chọn

Tùy chỉnh URI Path, URI Query String, Cookie, Extensions trên Cache Rules

Thông thường chúng ta cài đặt thêm rất nhiều plugin để quản lý trên WordPress, nên tùy trang mà cần thêm các rule vào để bypass cache, không thì nó sẽ cache loạn lên

Ở phiên bản này, phần Cache Rules hiện ra theo giao diện WEB, nên rất trực quan, ta có thể thêm các rule dựa vào cấu hình sẵn có của tác giả

2023-09-15_20-00-51

Đầu tiên là URI Path

Nó sẽ bắt đầu bằng URI Path, tiếp theo là does not contain

Phần điền vào thì bạn có thể chặn link nào tùy thích

2023-09-15_20-05-56

Cụ thể mình có dùng 1 plugin, nó quản lý các sub qua đường dẫn https://bibica.net/comment-subscriptions/

2023-09-15_20-08-39

Mình sẽ điền /comment-subscriptions/ vào Cache Rules qua URI Path

Tiếp theo là Extensions

Nó sẽ bắt đầu bằng URI Path, tiếp theo là does not contain cuối cùng là định dạng file muốn bypass cache

2023-09-15_20-10-14

Mặc định theo rule thì các file có đuôi là .xsl .xml .php sẽ không cache, bạn muốn add thêm file có đuôi nào không cache thì dùng cấu trúc tương tự như thế

URI Query String

Nó sẽ bắt đầu bằng URI Query String, tiếp theo là does not start with

2023-09-15_20-14-11

Phần chặn sẽ là phần phía sau ? ở link

https://bibica.net/?s=cdn, là tìm kiếm từ cdn trên trang, mặc định giá trị tìm kiếm (s=) sẽ không cache

Trên trang bibica.net, mình set phần comment, mặc định người lần đầu tiên comment trên trang, sẽ phải duyệt tay, từ lần thứ 2 trở đi thì sẽ tự được đồng ý, và do mình set comment có thể được sửa trong 5 phút, trong trường hợp type sai chính tả còn ấn sửa 😀

2023-09-15_20-20-11

Query String trên link có dạng là ?unapproved=, mình sẽ add thêm 1 rule, điền vào trong rule phần unapproved=, đúng theo công thức của tác giả

2023-09-15_20-25-06

Cuối cùng là Cookie

Giá trị Cookie thời điểm Cloudflare vừa ra mắt, chỉ có trên các gói Enterprise, giờ tài khoản FREE cũng có thể sử dụng thông qua Cache Rules

2023-09-15_20-27-55

Nó sẽ bắt đầu bằng Cookie, tiếp theo là does not contain, cuối cùng là tên các cookie

2023-09-15_20-31-05

Để xem cookie, bạn có thể comment, login vào tài khoản, add vào giỏ hàng sản phẩm, hoặc chạy bất cứ trang nào để kiểm tra

Cụ thể mình sẽ ấn F12 trên trình duyệt, đi qua tab Cookies, sau đó thử comment 1 phát, xem các cookie hiện ra như thế nào

Trên trang bibica.net, sau khi comment, nó sẽ sinh ra 4 cookie comment_author, comment_author_email, comment_author_url, và SimpleCommentEditing

3 cookie đầu do cùng bắt đầu là comment_author, nên chỉ cần chặn 1 rule về comment_author là sẽ có tác dụng cho 3 cookie còn lại, mình sẽ bổ xung thêm vào SimpleCommentEditing luôn cho chắc kèo 😀

2023-09-15_20-37-49

4 tùy chỉnh hiện tại tại bài này (URI Path, URI Query String, Cookie, Extensions) nó gần như đủ cho mọi thứ bạn cần để bypass, lý thuyết chỉ với Cache Rules, bạn có thể xử lý triệt để hoàn toàn vấn đề cache khi dùng Cloudflare

Trong trường hợp bạn dùng plugin nào đó lạ lạ, cứ google hoặc hỏi tác giả xem dùng plugin cache thì cần bypass cái gì, sau đó điền vào Cloudflare Cache Rules là được 😛

2023-09-15_20-40-09

Về tùy chọn Cache by device type thì mình hiểu là Cloudflare sẽ tách ra, cache riêng cho máy bàn, điện thoại …. các bản cache khác nhau, trang nhiều đối tượng khách dùng thiết bị di động xem bài hay mua hàng thì có thể bật lên

Ignore query string và Enable query string sort thì nên tắt cho 99% các trang, vì phần lớn chúng ta quản lý chằng chịt các link qua query string, cụ thể như thèng bibica.net đang dùng, ?w=300 và ?w=500 là 2 tấm ảnh khác nhau, tắt đi thì tất cả sẽ trở thành ảnh gốc, không còn tạo thumbnail nữa

Enable query string sort thì đôi khi nó làm loạn query string, khiến khách A và B nhầm thành 1 người, nói chung là nên tắt

An toàn nhất thì bạn chỉ cần cài đặt như mặc định tác giả khuyến cáo, sau đó bổ xung các rule riêng của trang mình đang chạy là đủ hiệu quả rồi, mình dùng thì thấy các vấn đề như admin login …. ổn định, không gặp vấn đề gì cả

Để kiểm tra xem mọi việc chạy có đúng chưa thì có thể nhìn response header cf-cache-status

Trong trang quản trị, hoặc các trang bypass, không cache sẽ luôn có giá giá trị DYNAMIC

Phía user thì sẽ thể hiện 3 trang thái

EXPIRED: trạng thái sau khi chúng ta xóa cache

MISS: trang chưa được tạo cache (thường xuất hiện sau khi xuất hiện EXPIRED)

HIT: trang đã được tạo cache (thường xuất hiện ngay sau khi xuất hiện MISS)

Thông thường mình cũng ít nhìn cái này, đa phần thêm rule, chặn 1 trang hay hành động nào đó, mới cần kiểm tra xem mọi thứ chạy đúng không 😀

Tổng kết

Không có gì phàn nàn về tốc độ và hiệu năng cache vì miễn bàn 😀 chưa kể Cloudflare còn miễn phí 😀 dịch vụ Edge Caching CDN nào nói nhanh hơn Cloudflare thì cứ thử vào speedvitals.com chạy 2 lần bài test, xem có tốt hơn con số bên dưới không rồi nói tiếp :]]

2023-09-15_21-06-33

Quan trọng nhất là người dùng cuối, không cần quá nhiều kiến thức, hoàn toàn có thể tự làm chủ hệ thống cache trên WordPress chỉ với Cache Rules

Về vấn đề cache mình nghĩ là Cache Rules làm ổn, về vấn đề clear cache, tạm mình cũng chưa quá ấn tượng với plugin nào, plugin Cloudflare chính chủ thì được cái nhẹ, dễ dùng, Super Page Cache for Cloudflare thì xóa cache và tạo preload cache tốt hơn, nhưng hơi nặng xíu, với trên trang bibica.net thì rất ít tính năng, thuần túy viết bài, nên mình cũng không đặt nặng chuyện xóa cache

Các trang dạng bán hàng, thường xuyên thêm sửa xóa số lượng sản phẩm, các dữ liệu liên thông các trang với nhau, comment liên tục để trả lời khách hàng thì xử lý chua lét, có điều lý thuyết với 4 tùy chọn bypass cũng có thể xử lý được

Comment policy: We love comments and appreciate the time that readers spend to share ideas and give feedback.
Notes: However, those deemed to be spam or solely promotional will be deleted.

You can create a Gravatar account, add avatar, then use that email to comment here, your account will have a more beautiful Avatar, easier to recognize with other members.

Please use real emails, you can receive notifications when comments are replied