แก้ปัญหา WordPress + Cloudflare ที่พบบ่อย (Redirect Loop, IP จริง, Cache ค้าง)

ปัญหา Too Many Redirects (Redirect Loop) และวิธีแก้ไข

ปัญหาที่พบบ่อยที่สุดเมื่อใช้ WordPress กับ Cloudflare บนเซิร์ฟเวอร์ Cloud VPS คือ Redirect Loop หรือ “Too Many Redirects” ปัญหานี้เกิดขึ้นเมื่อ Cloudflare และ WordPress ทั้งคู่พยายาม Redirect HTTPS ไปมา ซึ่งสร้างวง Redirect ที่ไม่สิ้นสุด

สาเหตุหลักคือ Cloudflare ต้องการให้ WordPress ใช้ HTTPS ในขณะที่เซิร์ฟเวอร์ WordPress Cloud VPS อาจตั้งค่าให้ HTTP ชี้ไปยัง HTTPS ซึ่งเมื่อ Cloudflare เห็น HTTP Request มาจาก Client เซิร์ฟเวอร์ WordPress จะแปลเป็น HTTPS และส่งไปยัง Origin แต่ Origin ก็ Redirect กลับมา ทำให้เกิด Loop

วิธีแก้ไขคือ ตั้งค่า SSL Mode ของ Cloudflare ให้เป็น “Full” หรือ “Full (strict)” แล้วเข้าไปยัง WordPress Settings ที่ Address (URL) ให้แน่ใจว่าทั้ง WordPress Address และ Site Address ตั้งค่าให้ใช้ Protocol เดียวกัน ที่สำคัญ ระดับเซิร์ฟเวอร์ Nginx หรือ Apache บนเซิร์ฟเวอร์ Cloud VPS ของคุณ ต้องไม่มี Force HTTPS Rule ที่ขัดแย้งกับ Cloudflare

ตั้งค่า SSL/TLS Mode ของ Cloudflare

Cloudflare มี 4 โหมด SSL/TLS ให้เลือก:

1. Off – ไม่ใช้ SSL ระหว่าง Client กับ Cloudflare (ไม่แนะนำ)

2. Flexible – SSL ระหว่าง Client กับ Cloudflare เท่านั้น บนเซิร์ฟเวอร์ Origin ใช้ HTTP (ใช้ได้สำหรับการทดสอบ)

3. Full – SSL ทั้ง Client-Cloudflare และ Cloudflare-Origin แต่ Cloudflare ไม่ตรวจสอบ Certificate ของ Origin (แนะนำ)

4. Full (strict) – SSL ทั้ง Client-Cloudflare และ Cloudflare-Origin พร้อมตรวจสอบ Certificate (แนะนำสำหรับ Production)

สำหรับ WordPress บนเซิร์ฟเวอร์ Cloud VPS ของ de.co.th ให้เลือก “Full (strict)” หลังจากตั้งค่า SSL Mode ให้เข้าไปยัง Cloudflare Dashboard แล้วไปที่ SSL/TLS > Overview เพื่อตรวจสอบว่าการตั้งค่าถูกต้องหรือไม่

ปัญหา IP ไม่ถูกต้องในเซิร์ฟเวอร์ Logs และ WordPress Plugin

ปัญหาอื่นที่พบบ่อยคือ WordPress บนเซิร์ฟเวอร์ Cloud VPS ของ de.co.th จะบันทึก IP Address ของ Cloudflare แทน IP จริงของผู้เข้าชม ซึ่งส่งผลต่อความถูกต้องของ Analytics, Security Plugin และ Geo-targeting Feature

สาเหตุคือ Client Request ไป Cloudflare ก่อน จากนั้น Cloudflare ส่ง Request ไปยัง Origin Server (WordPress Cloud VPS) ดังนั้น Server เห็น IP ของ Cloudflare เป็น Source IP และไม่รู้ว่า IP จริงอยู่ที่ไหน Cloudflare แก้ไขปัญหานี้โดยเพิ่ม Header CF-Connecting-IP ที่เก็บ IP จริงของผู้เข้าชม

วิธีแก้ไขคือ ตั้งค่าเซิร์ฟเวอร์ Nginx หรือ Apache เพื่อให้ WordPress ใช้ Header นี้แทน IP Source ปกติ ในส่วนถัดไป เราจะแสดงวิธีตั้งค่าโดยละเอียด

ตั้งค่า Nginx เพื่อ Restore Real IP

หากเซิร์ฟเวอร์ Cloud VPS ของคุณใช้ Nginx ให้เพิ่มโค้ดต่อไปนี้ใน Configuration File:

set_real_ip_from 173.245.48.0/20;
set_real_ip_from 103.21.244.0/22;
set_real_ip_from 103.22.200.0/22;
real_ip_header CF-Connecting-IP;

โค้ดนี้บอก Nginx ว่าถ้า Request มาจาก IP Range ของ Cloudflare ให้ใช้ Header CF-Connecting-IP เป็น Real IP แล้วรีโหลด Nginx Configuration เพื่อให้การตั้งค่ามีผล

ตั้งค่า Apache เพื่อ Restore Real IP

หากเซิร์ฟเวอร์ WordPress Cloud VPS ของคุณใช้ Apache ให้เปิดใช้ Module mod_remoteip ด้วยคำสั่ง:

a2enmod remoteip

จากนั้น เพิ่มโค้ดต่อไปนี้ใน /etc/apache2/conf-available/cloudflare.conf:

RemoteIPHeader CF-Connecting-IP
RemoteIPTrustedProxy 173.245.48.0/20
RemoteIPTrustedProxy 103.21.244.0/22
RemoteIPTrustedProxy 103.22.200.0/22

หลังจากนั้น เปิดใช้ Configuration โดยรันคำสั่ง a2enconf cloudflare และรีลโหลด Apache

ใช้ WordPress Plugin เพื่อ Fix Real IP

หากคุณไม่สบายใจแก้ไข Configuration File บนเซิร์ฟเวอร์ Cloud VPS โดยตรง คุณสามารถใช้ Plugin WordPress เช่น “Cloudflare” Plugin ของ Cloudflare เอง หรือ “WP Cloudflare Super Page Cache” ซึ่งจะจัดการเรื่อง IP อัตโนมัติ

ติดตั้ง Plugin จาก WordPress Plugin Directory เสร็จแล้ว Activate มันก็จะเริ่มทำงานโดยอัตโนมัติ Plugin จะตรวจสอบว่า Request มาจาก Cloudflare หรือไม่ ถ้าใช่ มันจะใช้ CF-Connecting-IP Header แทน IP Source ปกติ

ปัญหา Cache ค้าง (Stale Cache)

ปัญหาอีกอันที่พบบ่อยคือเซิร์ฟเวอร์ Cache ของ Cloudflare เก็บ Content เก่าไว้เกินไป ทำให้ผู้เข้าชมไม่เห็น Content ล่าสุดของ WordPress บนเซิร์ฟเวอร์ Cloud VPS

วิธีแก้ไขง่ายๆ คือเข้าไปยัง WordPress Dashboard แล้วไปที่ Settings > Cloudflare ถ้าติดตั้ง Official Plugin ของ Cloudflare มีปุ่มสำหรับการ Purge Cache หรือคุณสามารถเข้า Cloudflare Dashboard เลือก Caching แล้วคลิก Purge Everything เพื่อล้าง Cache ทั้งหมด

ตั้งค่า Cache Rules ให้เหมาะสม

เพื่อป้องกันปัญหา Cache ค้าง ให้ตั้งค่า Cache Rules บน Cloudflare ให้เหมาะสม ตัวอย่างเช่น ไม่ควร Cache WordPress Admin Pages, API Endpoints หรือ Pages ที่มี Personal Information ให้เข้าไป Cloudflare Dashboard ไปที่ Caching > Cache Rules เพิ่ม Rule เพื่อยกเว้น Path เหล่านี้

ปัญหา Mixed Content (HTTPS กับ HTTP)

ปัญหา Mixed Content เกิดขึ้นเมื่อหน้า HTTPS ของ WordPress บนเซิร์ฟเวอร์ Cloud VPS มีลิงค์ไปยัง Resource HTTP เช่น รูปภาพ JavaScript หรือ CSS ซึ่งส่งผลต่อ Security และ SEO

วิธีแก้ไขคือเข้า WordPress Database และเรียกใช้ SQL Query เพื่อแทนที่ทุก URL ที่เป็น HTTP เป็น HTTPS หรือใช้ Plugin เช่น “Really Simple SSL” ซึ่งจะแก้ไขปัญหาโดยอัตโนมัติ

ปัญหา 520 / 521 / 522 Error

Error เหล่านี้บ่งบอกว่ามีปัญหาการเชื่อมต่อระหว่าง Cloudflare และ Origin Server WordPress Cloud VPS ของคุณ 520 แปลว่า Origin Server ไม่ตอบสนอง 521 แปลว่า Origin Server เฉพาะหน้า และ 522 แปลว่า Timeout

วิธีแก้ไขคือตรวจสอบว่าเซิร์ฟเวอร์ Cloud VPS ของ de.co.th ยังเปิดอยู่ Firewall ไม่บล็อก IP ของ Cloudflare และ WordPress ไม่หยุดการทำงาน คุณสามารถลองแก้ไขโดย Flush DNS Cache หรือ Restart WordPress/PHP Service

สรุป

การใช้ Cloudflare กับ WordPress บนเซิร์ฟเวอร์ Cloud VPS ของ de.co.th มีประโยชน์มากมาย แต่ก็มีปัญหาต่างๆ ที่อาจเกิดขึ้น ด้วยการตั้งค่า SSL Mode, Real IP Headers, Cache Rules และการจัดการปัญหาอื่นๆ ตามที่แสดงไว้ด้านบน คุณจะสามารถใช้งาน WordPress และ Cloudflare ได้อย่างนี้และปลอดภัย