Skip to content

การตั้งค่า Cloudflare สำหรับ WordPress

WordPress vs Cloudflare

Cloudflare มีบริการด้าน DNS/CDN/Firewall ที่ช่วยปกป้องเว็บไซต์จากการโจมตีต่างๆ ได้ดี แพ็กเกจฟรีก็เพียงพอสำหรับเว็บทั่วไป

แต่เนื่องจากอินเทอร์เน็ตในประเทศเวลาส่งออกนอกจะไม่ค่อยเร็วนัก ดังนั้นอาจไม่เหมาะกับโฮสต์ในไทยทั่วๆ ไป แนะนำให้สอบถามโฮสต์ก่อนว่าเค้าแนะนำให้ใช้ Cloudflare หรือเปล่า

ตั้งค่าโดเมนให้ใช้ Cloudflare

คือการชี้ Name Server ไปยัง Cloudflare แล้วตั้งค่า DNS/Cache/Firewall ผ่าน Cloudflare

คู่มือของ Cloudflare ดูที่ Cloudflare Fundamentals → Add a site หรือค้นคำว่า ตั้งค่า cloudflare ก็ได้

หลังจากนั้นจะมีหลายวิธีในการเพิ่มประสิทธิภาพและความปลอดภัย ซึ่งหากใช้ Cloudflare ช่วย จะทำให้เราไม่ต้องใช้ปลั๊กอินอื่นอีกในการแคช มีแค่ปลั๊กอินที่เชื่อมกับ Cloudflare ดังนี้

1. ใช้ปลั๊กอิน Cloudflare (ฟรี)

แนะนำปลั๊กอิน Cloudflare ที่พัฒนาโดย Cloudflare เอง ปลั๊กอินนี้จะช่วยตั้งค่าพื้นฐานให้ เช่น การเพิ่มความปลอดภัยเมื่อคนเข้าที่หน้าล็อกอิน หรือป้องกันการโจมตี/สแปม พื้นฐาน

ข้อดีข้อเสีย
ใช้ง่าย ใช้ฟรี ป้องกันพื้นฐานได้ เคลียร์แคชอัตโนมัติระบบไม่ได้แคชหน้าเว็บ (เพราะถือว่าไม่ใช่ไฟล์ HTML) นอกจากต้องซื้อ Cloudflare APO ในข้อ 2.

2. ใช้ปลั๊กอิน Cloudflare และจ่าย Cloudflare APO

ตั้งค่าง่าย จ่ายแล้วจบ สมัครบริการ Automatic Platform Optimization for WordPress (Cloudflare APO) เดือนละ $5 ระบบจะแคชหน้าเว็บเป็นไฟล์ HTML ให้ที่ CDN ของ Cloudflare เลย ส่วนเว็บที่มีระบบสมาชิก เมื่อสมาชิกล็อกอินแล้ว หน้านั้นๆ ก็จะไม่แคชอัตโนมัติ

ข้อดีข้อเสีย
แคชได้ดี รองรับการล็อกอินได้ดีเสียค่าบริการรายเดือน $5 หรือรวมอยู่ในแพ็กเกจ Pro ขึ้นไป

3. ใช้ปลั๊กอิน Super Page Cache (ฟรี)

นอกจากปลั๊กอินของ Cloudflare มีปลั๊กอินอื่นที่ทำงานได้เหมือนข้อ 2 แต่ไม่ต้องเสียเงิน โดยให้เครื่อง Server ของเราทำการสร้างไฟล์ HTML ให้แทน (แต่ถ้ามีเป็นหมื่นๆ หน้า Server เราก็จะโหลดนะ เพราะระบบต้องแคชใหม่เป็นระยะ)

นั่นคือปลั๊กอิน Super Page Cache ระบบจะสร้างไฟล์ HTML ในแต่ละหน้าไว้ให้ แล้วแคชที่ Cloudflare ทั้งหมด

ส่วนสมาชิกที่ล็อกอิน ระบบจะเพิ่ม ?swcfpc=1 หลัง URL ที่เรียก เพื่อทำให้ไม่ต้องแคช

ข้อดีข้อเสีย
แคชได้ดี รองรับการล็อกอินได้ดี ฟรีด้วยServer อาจทำงานหนักถ้าหน้าเยอะมากๆ, URL ไม่ค่อยสวย

4. ตั้งค่าแคชใน Cloudflare เอง

ท่านี้จะยากและอาจมีปัญหา (เพราะบางปลั๊กอินอาจไม่รองรับ) แต่จะทำให้ได้ข้อดีจากข้อ 2 โดยไม่ต้องเสียตังค์ และปรับแต่งเพิ่มได้อิสระ (เช่น ลิงก์แชร์จาก Facebook ที่มีค่า fbclid โดยปกติระบบจะไม่แคช ทำให้ถ้าคนแชร์เยอะๆ Server อาจโหลดได้)

คู่มือของ Cloudflare ดูที่ Speed Up WordPress and Improve Performance แต่รูปจะเป็น UI ของเก่า เลยแคปของ Seed Webs มาให้ดูด้วย ตามนี้

Seed Webs Cloudflare Setup

แนวทางคือ

4.1 ตั้งให้แคชทุกหน้าก่อน

เลือกชื่อเว็บของเรา และตั้งค่าให้ทุกหน้าเป็นหน้าแคช

Seed Webs Cloudflare Catch All

ให้เปลี่ยน th.seedwebs.com เป็นชื่อเว็บที่ต้องการ

4.2 เพิ่มหน้า + เงื่อนไขที่จะไม่แคช

เลือกเงื่อนไขที่ไม่ต้องการให้แคช เช่น

  • คนที่ล็อกอิน - มี Cookie wordpress_logged_in
  • คนที่มีสินค้าในตะกร้า - มี Cookie woocommerce_xxx ต่างๆ
  • URL เป็น /wp-admin/, /cart/, /checkout/ หรือหน้าล็อกอินอื่นๆ ที่เราตั้งไว้
  • มีค่าส่งค่า (URI Query String) ต่างๆ ขึ้นกับปลั๊กอินที่ใช้ เช่น loginSocial=* กรณีใช้ Nextend Social Login

Seed Webs Cloudflare Expression

แล้วตั้งค่าว่า หน้าเหล่านี้ไม่ต้องแคช โดยให้ความสำคัญอยู่เหนือสุด (Place at First)

Seed Webs Cloudflare Not Cache

ข้อดีข้อเสีย
แคชได้ดี รองรับการล็อกอินได้ดี ฟรีด้วยต้องตั้งค่าด้วยตัวเอง และตรวจสอบให้รองรับปลั๊กอินที่ใช้

รายละเอียดการตั้งค่าของ Seed Webs

FieldOperatorValue
Cookiecontainswp-
Cookiecontainswordpress_
Cookiecontainswoocommerce_
Cookiecontainsno_cache
CookiecontainsPHPSESSID
URL Pathcontains/wp-admin
URL Pathcontainswp-.*.php
URL Pathcontains/feed
URL Pathcontains/cart
URL Pathcontains/checkout
URL Pathcontains/my-account
URL Pathcontains.xml
URL Pathequals/.well-known.*
URI Query StringcontainsloginSocial=
URI Query Stringcontainsnsl_bypass_cache=

หมายเหตุ:

  1. เนื่องจากแนวทางนีค่อนข้างซับซ้อน และค่าที่ตั้งไว้ อาจไม่รองรับปลั๊กอินที่แต่ละเว็บใช้งาน (เช่น เว็บ Seed Webs ไม่ใช้ระบบ Comment ของ WordPress จึงไม่ได้ตั้งค่า Cookie comment_* ไว้) แนะนำให้ทดสอบก่อนนำไปใช้นะครับ

  2. ลิงก์ที่คนแชร์ มักมีค่า utm_source, utm_medium, fbclid, gclid หรืออื่นๆ ที่เป็นค่าตัวชี้วัดการแชร์ จะถูกเก็บข้อมูลโดยโค้ด JavaScript ของ Facebook, Google Analytics อยู่แล้ว ผมเลยให้ติดแคชไปนะครับ ทำให้เวลามีลิงก์ที่คนแชร์เยอะๆ Server ก็จะไม่โหลดด้วยครับ


ตั้งค่าป้องกันการโจมตีหน้า Login

นอกจากเรื่องการตั้งค่าแคช อีกประเด็นที่เป็นช่องทางหลักในการเจาะระบบของ WordPress ก็คือโจมตีหน้าล็อกอิน หรือ Brute Force Attack

เราสามารถตั้งค่าให้ป้องกันหน้านี้เป็นหลัก เพื่อไม่ให้ Server รับโหลดมากเกินไป โดยตั้งค่าที่ Configuration Rules ตามรูป

Cloudflare Configuration Rules

แล้วสร้าง Rule ที่มีเงื่อนไขว่า หาก URL มี /wp-login.php ให้ตรวจสอบว่าเป็น Browser ที่น่าเชื่อถือ (ไม่ใช่ Bot) และตั้งระดับความปลอดภัยไว้สูงสุด (I’m Under Attack)

หรือหากมีสมาชิกที่เข้าจาก IP เดียวกันมากๆ (เช่น สำนักข่าวที่มีคนเขียนข่าวพร้อมกันหลายคน, ระบบเว็บโรงเรียนที่มีนักเรียนเข้าพร้อมกัน) แนะนำให้เลือก High แทน I’m Under Attack จะทำให้โดนบล็อกน้อยกว่า

Cloudflare Configuration Rules for WordPress Login

เท่านี้ แม้จะเป็นแพ็กเกจฟรีของ Cloudflare ก็สามารถป้องกันการโจมตีหน้าล็อกอินได้ดีมากๆ แล้ว ส่วนตัวผมคิดว่าหากใช้ร่วมกับ Seed Login Pro ก็ยิ่งปลอดภัย ง่ายและสะดวกกว่าใช้ Cloudflare Access หรือ Zero Trust ที่ต้องตั้งค่าเพิ่มและไม่เหมาะกับเว็บอีคอมเมิร์ซ


ความรู้เพิ่มเติม

What settings are applied when I click Optimize Cloudflare for WordPress in Cloudflare’s WordPress plugin อธิบายว่า Cloudflare ตั้งค่าอะไรไปบ้างเวลาใช้ปลั๊กอิน Cloudflare แล้วกด Apply Recommended Settings

How to improve WordPress security แนะนำภาพรวมเรื่องความปลอดภัย ซึ่งสรุปว่า ใช้ Cloudflare APO จ่ายแล้วจบ

Guide to HTML Full Page Caching with Cloudflare for WordPress แนะนำการตั้งค่าแคช ตัวอย่างที่เค้าใช้ รวมไปถึงวิธีตรวจสอบว่าเรียกผ่านแคชหรือเปล่า (แนะนำให้อ่านครับ)

ใช้ Cloudflare Access กับหน้าล็อกอิน โดยคุณ Jiraz แนะนำให้ตั้งค่า Cloudflare Access หรือ Zero Trust ไว้ ใครที่จะเข้าหน้าล็อกอิน ระบบ Cloudflare จะตรวจสอบและส่ง Email ให้ยืนยัน วิธีนี้เหมาะกับเว็บ Content เป็นหลัก ไม่มีระบบสมาชิก ส่วนแพ็กเกจฟรีของ Cloudflare Access ให้ 50 ผู้ใช้งาน