การตั้งค่า Cloudflare สำหรับ WordPress
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 มาให้ดูด้วย ตามนี้
แนวทางคือ
4.1 ตั้งให้แคชทุกหน้าก่อน
เลือกชื่อเว็บของเรา และตั้งค่าให้ทุกหน้าเป็นหน้าแคช
ให้เปลี่ยน th.seedwebs.com เป็นชื่อเว็บที่ต้องการ
4.2 เพิ่มหน้า + เงื่อนไขที่จะไม่แคช
เลือกเงื่อนไขที่ไม่ต้องการให้แคช เช่น
- คนที่ล็อกอิน - มี Cookie
wordpress_logged_in
- คนที่มีสินค้าในตะกร้า - มี Cookie
woocommerce_xxx
ต่างๆ - URL เป็น
/wp-admin/
,/cart/
,/checkout/
หรือหน้าล็อกอินอื่นๆ ที่เราตั้งไว้ - มีค่าส่งค่า (URI Query String) ต่างๆ ขึ้นกับปลั๊กอินที่ใช้ เช่น
loginSocial=*
กรณีใช้ Nextend Social Login
แล้วตั้งค่าว่า หน้าเหล่านี้ไม่ต้องแคช โดยให้ความสำคัญอยู่เหนือสุด (Place at First)
ข้อดี | ข้อเสีย |
---|---|
แคชได้ดี รองรับการล็อกอินได้ดี ฟรีด้วย | ต้องตั้งค่าด้วยตัวเอง และตรวจสอบให้รองรับปลั๊กอินที่ใช้ |
รายละเอียดการตั้งค่าของ Seed Webs
Field | Operator | Value |
---|---|---|
Cookie | contains | wp- |
Cookie | contains | wordpress_ |
Cookie | contains | woocommerce_ |
Cookie | contains | no_cache |
Cookie | contains | PHPSESSID |
URL Path | contains | /wp-admin |
URL Path | contains | wp-.*.php |
URL Path | contains | /feed |
URL Path | contains | /cart |
URL Path | contains | /checkout |
URL Path | contains | /my-account |
URL Path | contains | .xml |
URL Path | equals | /.well-known.* |
URI Query String | contains | loginSocial= |
URI Query String | contains | nsl_bypass_cache= |
หมายเหตุ:
-
เนื่องจากแนวทางนีค่อนข้างซับซ้อน และค่าที่ตั้งไว้ อาจไม่รองรับปลั๊กอินที่แต่ละเว็บใช้งาน (เช่น เว็บ Seed Webs ไม่ใช้ระบบ Comment ของ WordPress จึงไม่ได้ตั้งค่า Cookie
comment_*
ไว้) แนะนำให้ทดสอบก่อนนำไปใช้นะครับ -
ลิงก์ที่คนแชร์ มักมีค่า
utm_source
,utm_medium
,fbclid
,gclid
หรืออื่นๆ ที่เป็นค่าตัวชี้วัดการแชร์ จะถูกเก็บข้อมูลโดยโค้ด JavaScript ของ Facebook, Google Analytics อยู่แล้ว ผมเลยให้ติดแคชไปนะครับ ทำให้เวลามีลิงก์ที่คนแชร์เยอะๆ Server ก็จะไม่โหลดด้วยครับ
ตั้งค่าป้องกันการโจมตีหน้า Login
นอกจากเรื่องการตั้งค่าแคช อีกประเด็นที่เป็นช่องทางหลักในการเจาะระบบของ WordPress ก็คือโจมตีหน้าล็อกอิน หรือ Brute Force Attack
เราสามารถตั้งค่าให้ป้องกันหน้านี้เป็นหลัก เพื่อไม่ให้ Server รับโหลดมากเกินไป โดยตั้งค่าที่ Configuration Rules ตามรูป
แล้วสร้าง Rule ที่มีเงื่อนไขว่า หาก URL มี /wp-login.php
ให้ตรวจสอบว่าเป็น Browser ที่น่าเชื่อถือ (ไม่ใช่ Bot) และตั้งระดับความปลอดภัยไว้สูงสุด (I’m Under Attack)
หรือหากมีสมาชิกที่เข้าจาก IP เดียวกันมากๆ (เช่น สำนักข่าวที่มีคนเขียนข่าวพร้อมกันหลายคน, ระบบเว็บโรงเรียนที่มีนักเรียนเข้าพร้อมกัน) แนะนำให้เลือก High แทน I’m Under Attack จะทำให้โดนบล็อกน้อยกว่า
เท่านี้ แม้จะเป็นแพ็กเกจฟรีของ 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 ผู้ใช้งาน