Xem Nội Dung Ngay

Cloudflare là gì? Cách cài đặt Cloudflare CDN (cache) cho Ghost

Cloudflare và gì và cách dùng Cloudflare CDN cho Ghost như thế nào?

Cường Trần
Cường Trần
9 phút đọc
Cloudflare là gì? Cách cài đặt Cloudflare CDN (cache) cho Ghost

Nếu Google được xem là ông vua thế giới SEO thì Cloudflare được xem là bà hoàng thế giới CDN (mạng lưới phân phối nội dung website) ở quy mô toàn cầu.

Ghost (Pro) dùng Cloudflare CDN cho khách hàng doanh nghiệp của họ nhưng không hướng dẫn bạn cách dùng Cloudflare CDN với Ghost self-host.

Ghost (Pro) là gì? Tìm hiểu về dịch vụ Ghost (Pro) - Bạn có nên dùng?
Ghost (Pro) là gì? Hãy cùng tìm hiểu về dịch vụ chính chủ vô cùng nổi tiếng này của Ghost CMS nhé!

Hôm nay tôi sẽ bật mí cho bạn một "kỹ thuật bí mật" dùng Cloudflare CDN với Ghost. Hãy tập trung hết sức có thể vì bạn sẽ không tìm thấy bất cứ hướng dẫn nào khác chi tiết tương tự như ghostFam.

Cloudflare là gì?

Cloudflare là một công ty công nghệ cung cấp nhiều giải pháp ngoài CDN nên hầu như rất khó có một định nghĩa đầy đủ cho Cloudflare là gì.

Hiểu một cách đơn giản là Cloudflare là một server "lá chắn" cho server Ghost của bạn, mọi traffic của site bạn sẽ được xử lý qua Cloudflare trước khi tới server bạn. Nghĩa là nếu cache trên Cloudflare thì mọi lượt visit sẽ chỉ dùng tài nguyên của Cloudflare mà thôi.

Cloudflare là "Shield" cho Server của bạn
Cloudflare là "Shield" cho Server của bạn

Cloudflare giúp server bạn nghỉ ngơi "không cần làm việc" trong khi tốc độ site lại nhanh hơn, bảo mật hơn, nhiều tiện ích hơn và SEO tốt hơn.

Cài đặt Cloudflare CDN cho website Ghost

Dù có nhiều lợi ích nhưng bạn sẽ có thể không cần cài đặt Cloudflare khi server bạn đang dùng ở Việt Nam (TinoHost hay AZDigi). Cloudflare có thể gây chậm site bạn hơn, các lợi ích khác thì giữ nguyên.

Với các hosting như Cloudcone có server ở LA, Mỹ (ghostFam đang dùng) thì dùng Cloudflare sẽ có lợi cho tốc độ hơn.

Cài đặt tiên quyết và vùng cấm khi dùng Cloudflare

Điều kiện tiên quyết là domain của bạn phải được quản lý trên Cloudflare Nameserver và đồng thời đã bật Cloudflare Proxy (bật đám mây màu cam) cho domain. Nếu không, mọi cấu hình ở các bước tiếp theo đều không hiệu lực.

Đảm bảo đã bật Proxied
Đảm bảo đã bật Proxied

Vùng cấm, đây là khu vực bạn cấu hình 1 lần và không được thay đổi cũng như đụng chạm đến sau này. Nếu không, hậu quả site bạn sẽ bị lỗi SSL ở server gốc bạn cài Ghost.

Đầu tiên, bạn phải chuyển SSL qua chế độ Full (Strict), tuyệt đối không dùng Full hay Flexible. Kể cả sau này, cũng không được thay đổi, bởi vì nó sẽ làm lỗi gia hạn SSL của Let's Encrypt khi gia hạn tự động tại server gốc và site bạn sẽ mất SSL.

Full (strict)
Full (strict)

Thứ hai, TẮT chế độ Always Use HTTPS, cùng lý do SSL như trên luôn. Không tắt là lỗi SSL.

Tắt Always Use HTTPS
Tắt Always Use HTTPS

Thứ ba, bạn không nên cài các loại cache nào ở server (Redis, Varnish, Nginx cache, Memcache,...) bởi vì bạn sẽ dùng Cloudflare để cache hoàn toàn, tránh có quá nhiều lớp cache phức tạp và khó dùng phối hợp.

Cài đặt Cloudflare full page edge cache

Full page cache hay còn gọi là Cache Everything khi bạn dùng Cloudflare. Bạn phải bật cache này thì mới gọi là dùng Cloudflare cho Ghost.

Bạn vào Page Rule, tạo rule mới, bạn chỉ có tối đa 3 page rules cho tài khoản miễn phí. Không được dùng sai gây lãng phí.

Bạn tạo 3 page rules với thứ tự như sau

  1. Không cache Ghost Admin
  2. Không cache sitemap
  3. Cache Everything cho mọi trang
#1. Không cache Ghost Admin
#1. Không cache Ghost Admin
#2. Không cache sitemap
#2. Không cache sitemap
#3. Cache mọi trang còn lại
#3. Cache mọi trang còn lại
3 Page rules khi đã tạo xong
3 Page rules khi đã tạo xong

Không cache trang preview page của Ghost

Trang xem trước preview page dùng để xem trước bài viết, bạn cần loại trừ cache ở trang này.

Theo lý thuyết bạn chỉ cần thêm rule /p/* nữa là được, nhưng rất tiếc bạn chỉ có tối đa 3 page rule và bạn đã dùng hết cho cài đặt ở phần trên.

Để thay thế page rule thứ 4 này, tôi sẽ dùng Cloudflare Worker thay thế.

Bạn tạo một worker mới với code bên dưới, đặt tên tùy ý, nhưng nên đặt là no-cache cho dễ nhớ.

async function handleRequest(request) {
  const url = new URL(request.url)
  const someCustomKey = `https://${url.hostname}${url.pathname}`

  let response = await fetch(request, {
    cf: {
      cacheTtl: 5,
      cacheEverything: false,
    },
  })

  response = new Response(response.body, response)
  response.headers.set("Cache-Control", "no-cache, private, no-store, must-revalidate, max-stale=0, post-check=0, pre-check=0")
  return response
}

addEventListener("fetch", event => {
  return event.respondWith(handleRequest(event.request))
})
no-cache

Sau khi xong, tạo một route như sau:

no-cache (Cloudflare Worker)
no-cache (Cloudflare Worker)

Chưa dừng ở đó, bạn cần tạo một Cloudflare Worker thứ hai để cài đặt cho các trang đăng ký, đăng nhập hay tài khoản. Các trang này rất quan trọng nếu cho membership để đảm bảo thành viên đăng nhập không bị lỗi.

Bạn có thể đặt tên là original-cache, code như sau:

async function handleRequest(request) {
  const url = new URL(request.url)
  const someCustomKey = `https://${url.hostname}${url.pathname}`

  let response = await fetch(request, {
    cf: {
      cacheTtl: 5,
      cacheEverything: false,
    },
  })
  response = new Response(response.body, response)

  response.headers.set("Cache-Control", "public,  max-age=0, must-revalidate")
  return response
}

addEventListener("fetch", event => {
  return event.respondWith(handleRequest(event.request))
})

Sau đó bạn route theo mẫu:

Không cache cho các trang thành viên liên quan
Không cache cho các trang thành viên liên quan

Tự động xoá cache khi bạn xuất bản bài viết mới

Bất cứ khi nào bạn xuất bản bài viết mới, bạn nên xoá cache trang chủ và các trang liên quan (nếu có) để người xem có thể thấy bài viết mới của bạn.

Để xoá cache (purge cache) bạn phải đăng nhập vào Cloudflare và xoá từng URL như của trang chủ, trang blog archive,... (không cần thiết Purge Everything).

Trở thành thành viên để xem tiếp nội dung...