ข้ามไปเนื้อหาหลัก

ปัญหา Cloudflare Worker Redirect ไม่ทำงาน เพราะไฟล์ Static Assets ถูกเสิร์ฟก่อน

นักพัฒนาแชร์อุทาหรณ์เขียนโค้ด Redirect ใน Worker แต่โค้ดไม่เคยถูกรันเลยเพราะติดระบบ Static Assets ที่ทำงานดักหน้าก่อน

เรียบเรียงโดย AI
Inewgen
05 Aug 2026ที่มา: Dev.to3 นาทีอ่าน (0 ครั้ง)
แชร์
ปัญหา Cloudflare Worker Redirect ไม่ทำงาน เพราะไฟล์ Static Assets ถูกเสิร์ฟก่อน

ภาพประกอบจากคลังภาพสต็อก ไม่ใช่ภาพจากเหตุการณ์จริง

ขนาดตัวอักษร
  • โค้ด Redirect ใน Worker fetch handler ไม่ทำงานเพราะระบบ Static Assets ดึงไฟล์ไปเสิร์ฟที่ Edge ก่อน
  • คำขอจริงทั้งหมดมีไฟล์รองรับ ทำให้ Worker ถูกข้ามไป และโค้ดทำงานเฉพาะหน้า 404 เท่านั้น
  • แนวทางแก้ไขที่ถูกต้องคือการใช้ Redirect Rule ของ Cloudflare แทนการเขียนโค้ดใน Worker
  • การบังคับให้ Worker รันก่อน Asset Lookup จะทำให้เสียทรัพยากรโดยไม่จำเป็นสำหรับการทำ Redirect

นักพัฒนาซอฟต์แวร์รายหนึ่งได้ออกมาแชร์ประสบการณ์ชวนปวดหัว หลังจากที่เขาเขียนฟังก์ชันเปลี่ยนเส้นทางหรือ Redirect จากโดเมน www ไปยัง apex ในส่วน fetch handler ของ Cloudflare Worker แต่ปรากฏว่าโค้ดดังกล่าวกลายเป็น Dead Code ทันทีที่ Deploy ขึ้นระบบ โดยที่เจ้าตัวไม่รู้ตัวเลยเป็นเวลาหลายสัปดาห์ แม้ว่าตรรกะการ Redirect จะถูกเขียนไว้อย่างถูกต้องและสามารถอ่านดูได้ในแดชบอร์ด แต่เมื่อทดลองเข้าใช้งานผ่านหน้าเว็บไซต์จริง ระบบกลับดึงหน้าเว็บมาแสดงผลตามปกติโดยไม่มีการเปลี่ยนเส้นทางแต่อย่างใด

เมื่อลองใส่คำสั่ง console.log เพื่อตรวจสอบการทำงาน จึงพบความจริงว่าฟังก์ชันดังกล่าวไม่เคยถูกเรียกใช้งานเลย ไม่ใช่เพราะโค้ดทำงานช้าหรือเกิดข้อผิดพลาด แต่เนื่องมาจากความสามารถด้าน Workers static assets ของ Cloudflare ที่กำหนดให้คำขอใดๆ ที่ตรงกับไฟล์ในไดเรกทอรี Static Assets จะถูกเสิร์ฟตรงที่ Edge ทันที โดยที่สคริปต์ Worker จะไม่ถูกเรียกใช้งานเลยแม้แต่น้อย

กลไกนี้ถูกออกแบบมาเป็นค่าเริ่มต้นเพื่อประสิทธิภาพและความคุ้มค่า เนื่องจากคำขอไฟล์สถิตจะมีความรวดเร็วสูงและไม่ถูกคิดค่าบริการเรียกใช้งาน Worker แต่ข้อควรระวังคือมันทำให้ Worker กลายเป็นเสมือนระบบสำรอง (Fallback) แทนที่จะเป็นประตูด่านหน้าสำหรับทุกคำขอ ทำให้ตรรกะการทำงานภายใน fetch handler จะรันเฉพาะกรณีที่ระบบไม่พบไฟล์ที่ต้องการ หรือพูดง่ายๆ ว่าโค้ดจะทำงานเฉพาะกับหน้า 404 ที่ไม่มีอยู่จริงเท่านั้น

server architecture network routing diagram

ภาพประกอบจากคลังภาพสต็อก ไม่ใช่ภาพจากเหตุการณ์จริง

ไม่อยากพลาดข่าวใหม่?

สมัครรับสรุปข่าวสารใหม่ทางอีเมล ไม่บ่อยจนรำคาญ

โฆษณา

วิธีการตรวจสอบปัญหานี้สามารถทำได้ง่ายๆ ด้วยการใช้คำสั่ง curl เพื่อเช็กสถานะ HTTP Header เช่นการรันคำสั่ง curl -sI https://www.example.com/ ซึ่งหากพบว่าได้รับรหัสสถานะ 200 แทนที่จะเป็น 301 หรือ 302 ควบคู่ไปกับการทดลองเรียกเส้นทางที่ไม่มีอยู่จริงแล้วพบว่ามีการ Redirect เกิดขึ้น นั่นแปลว่าโค้ดของคุณกำลังทำงานเฉพาะตอนที่ระบบหาไฟล์ไม่พบเท่านั้น

แนวทางแก้ไขที่เหมาะสมที่สุดสำหรับการทำ Host-level redirects คือการย้ายไปใช้ฟีเจอร์ Redirect Rule ของ Cloudflare แทน (ไปที่เมนู Rules > Redirect Rules) ซึ่งระบบนี้จะทำงานก่อนขั้นตอนการตรวจสอบ Static Assets ในลำดับการประมวลผลทราฟฟิกของ Cloudflare โดยกำหนดเงื่อนไขว่าหาก hostname เท่ากับโดเมน www ให้ทำ Dynamic Redirect ไปยังโดเมนหลักพร้อมสถานะ 301 และคง Query String ไว้ ซึ่งวิธีนี้เปิดให้ใช้งานฟรีทุกแพ็กเกจ และช่วยลดภาระการประมวลผลใน Worker ได้อีกด้วย

อย่างไรก็ตาม ในการตั้งค่าของ Static Assets จะมีตัวเลือกที่สามารถบังคับให้ Worker รันก่อนการตรวจสอบ Asset Lookup ในทุกๆ คำขอ ซึ่งแม้จะช่วยแก้ปัญหาเรื่องตรรกะการทำงานต่อคำขอ (Per-request logic) เช่น การตรวจสอบสิทธิ์หรือการแก้ไข Header ได้ แต่มันไม่ใช่ทางเลือกที่ดีสำหรับการทำ Redirect เนื่องจากจะทำให้ระบบต้องเรียกใช้ Worker ในทุกๆ คำขอเพียงเพื่อย้ายผู้เข้าชมจำนวนน้อยนิดระหว่างสองโฮสต์เนม

ที่มา: Dev.to

ความคิดเห็น

แสดงความคิดเห็น
0/2000

พบข้อมูลผิดพลาดในบทความนี้? แจ้งปัญหาบทความนี้