Error 522 Connection Timed Out ไม่ได้มาจากเว็บเซิร์ฟเวอร์ของคุณ แต่มาจาก Cloudflare ที่อยู่ข้างหน้า มันแปลว่า Cloudflare พยายามเปิดการเชื่อมต่อไปยังเซิร์ฟเวอร์ต้นทางของคุณแล้ว แต่การจับมือ (TCP handshake) ไม่สำเร็จภายในเวลาที่กำหนด
ข่าวดีคือมันบอกเจาะจงกว่าที่หลายคนคิด เพราะ Cloudflare มี error สี่ตัวสำหรับปัญหาฝั่งต้นทาง และแต่ละตัวชี้ไปคนละจุดของเส้นทาง การรู้ว่าทำไมถึงได้ 522 ไม่ใช่ 521 หรือ 524 ตัดสาเหตุออกไปได้ครึ่งหนึ่งตั้งแต่ยังไม่เริ่มแก้
บทความนี้แยกสี่ตัวนั้นให้ชัด แล้วไล่สาเหตุของ 522 เรียงตามความถี่จริง — โดยสาเหตุอันดับหนึ่งเป็นเรื่องที่แก้ได้ในห้านาทีถ้ารู้ว่าต้องดูตรงไหน
521, 522, 523, 524 — สี่ตัวนี้คนละเรื่องกัน
ตารางนี้คือส่วนที่มีประโยชน์ที่สุดของบทความ เพราะเลขบอกอยู่แล้วว่าพังตรงไหนของเส้นทาง
| โค้ด | เกิดอะไรขึ้น | ชี้ไปที่ |
|---|---|---|
| 521 Web Server Is Down | ต้นทางปฏิเสธการเชื่อมต่อ (ส่ง RST กลับ) | เว็บเซิร์ฟเวอร์ไม่ได้รัน หรือไฟร์วอลล์ REJECT |
| 522 Connection Timed Out | จับมือไม่สำเร็จ ไม่มีคำตอบภายในเวลา | ไฟร์วอลล์ DROP แพ็กเกจ หรือเซิร์ฟเวอร์รับงานไม่ทัน |
| 523 Origin Is Unreachable | Cloudflare หาเส้นทางไปต้นทางไม่เจอเลย | DNS ชี้ IP ผิด หรือ IP นั้นไม่มีอยู่จริง |
| 524 A Timeout Occurred | ต่อติดแล้ว แต่แอปตอบไม่ทันใน 100 วินาที | สคริปต์ช้า คิวรีหนัก งานยาวเกิน |
สาเหตุอันดับหนึ่ง: ไฟร์วอลล์บล็อก IP ของ Cloudflare
นี่คือสาเหตุที่พบมากที่สุดของ 522 และเป็นสาเหตุที่แก้ง่ายที่สุดด้วย
เมื่อเว็บอยู่หลัง Cloudflare ทุก request ที่มาถึงเซิร์ฟเวอร์ของคุณจะมาจาก IP ของ Cloudflare ไม่ใช่ IP ของผู้เข้าชม ถ้าไฟร์วอลล์หรือระบบกันบุกรุกตัดสินใจบล็อก IP เหล่านั้น — ซึ่งเกิดขึ้นได้ง่ายมากเพราะทราฟฟิกทั้งเว็บมาจาก IP ไม่กี่ชุด จึงดูเหมือนการโจมตี — เว็บจะขึ้น 522 ทันที
ตัวการที่พบบ่อยคือ fail2ban, CSF, mod_evasive หรือระบบกันบุกรุกของ DirectAdmin ที่เห็นคำขอจำนวนมากจาก IP เดียวแล้วแบนอัตโนมัติ ผลคือเว็บล่มเป็นช่วง ๆ แล้วกลับมาเองเมื่อแบนหมดอายุ ซึ่งเป็นอาการที่หาสาเหตุยากมากถ้าไม่รู้ว่าต้องดูตรงนี้
วิธีแก้: ใส่ IP range ทั้งหมดของ Cloudflare ลงใน allowlist ของไฟร์วอลล์และของทุกระบบกันบุกรุกที่ใช้ Cloudflare เผยแพร่รายการ IP ไว้เป็นสาธารณะและมีการอัปเดตเป็นครั้งคราว ควรตั้งให้ดึงมาอัปเดตอัตโนมัติแทนที่จะก๊อปครั้งเดียวจบ
สาเหตุรองลงมา
- เซิร์ฟเวอร์รับการเชื่อมต่อใหม่ไม่ทัน เมื่อโหลดสูงจนคิวการเชื่อมต่อเต็ม แพ็กเกจใหม่จะถูกทิ้งเงียบ ๆ ซึ่งให้ผลเป็น 522 พอดี ดูจากค่า load average และจำนวน worker ที่ตั้งไว้
- RAM หมดจนกระบวนการถูก OOM killer เก็บ อาการคล้ายกันคือเว็บล่มเป็นช่วง ๆ ให้ตรวจด้วยคำสั่ง dmesg แล้วมองหาบรรทัดที่เกี่ยวกับ oom
- DNS ใน Cloudflare ชี้ไป IP เก่า มักเกิดหลังย้ายเซิร์ฟเวอร์แล้วลืมแก้ระเบียน A ถ้า IP นั้นยังมีเครื่องอื่นอยู่จะได้ 522 แต่ถ้าไม่มีอะไรเลยมักได้ 523 แทน
- เว็บเซิร์ฟเวอร์ฟังผิดพอร์ตหรือ bind ผิดที่อยู่ ถ้าบริการ bind อยู่ที่ 127.0.0.1 แทน 0.0.0.0 มันจะรับเฉพาะการเชื่อมต่อจากในเครื่อง และปฏิเสธทุกอย่างจากข้างนอกรวมถึง Cloudflare
- ผู้ให้บริการเน็ตหรือ upstream ของเซิร์ฟเวอร์มีปัญหาชั่วคราว กรณีนี้แก้อะไรไม่ได้นอกจากรอ แต่ยืนยันได้ด้วยการต่อตรงเข้า IP จากเครื่องอื่น
- ตั้ง Cloudflare เป็นโหมด Full (strict) แต่ใบรับรองบนเซิร์ฟเวอร์หมดอายุ กรณีนี้มักได้ 526 แต่บางการตั้งค่าจะแสดงเป็นอาการต่อไม่ติดแทน
ไล่ตรวจตามลำดับนี้
- เช็ก allowlist ของ Cloudflare ก่อนเลย ทั้งไฟร์วอลล์และ fail2ban/CSF เพราะเป็นสาเหตุอันดับหนึ่งและใช้เวลาตรวจแค่นาทีเดียว
- ต่อตรงเข้าเซิร์ฟเวอร์โดยข้าม Cloudflare ใช้ curl ยิงไปที่ IP จริงพร้อมระบุ Host header ถ้าต่อได้แปลว่าเซิร์ฟเวอร์ปกติและปัญหาอยู่ระหว่างทาง
- ดูว่ามีอะไรฟังอยู่จริง สั่ง ss -tlnp แล้วยืนยันว่าเว็บเซิร์ฟเวอร์ bind อยู่ที่ 0.0.0.0 พอร์ต 80 และ 443 ไม่ใช่ 127.0.0.1
- เช็กโหลดและแรม ใช้ uptime กับ free -h ถ้าโหลดสูงผิดปกติหรือแรมเหลือน้อย ปัญหาคือกำลังไม่พอ ไม่ใช่การตั้งค่า
- อ่าน log ของเว็บเซิร์ฟเวอร์ในช่วงที่เกิด ถ้า log ว่างเปล่าตอนเกิด 522 แปลว่า request ไปไม่ถึงเซิร์ฟเวอร์เลย ซึ่งยืนยันว่าถูกบล็อกระหว่างทาง
- ยืนยันระเบียน A ใน Cloudflare ว่าชี้ไป IP ปัจจุบันจริง โดยเฉพาะถ้าเพิ่งย้ายเครื่อง
ป้องกันไม่ให้เกิดอีก
- ตั้งให้ allowlist ของ Cloudflare อัปเดตอัตโนมัติ รายการ IP มีการเปลี่ยนเป็นครั้งคราว การก๊อปครั้งเดียวจบจะกลับมาพังในอีกหลายเดือน
- ตั้งค่าให้เว็บเซิร์ฟเวอร์อ่าน IP จริงของผู้เข้าชม ใช้ ngx_http_realip_module หรือ mod_remoteip เพื่อให้ระบบกันบุกรุกเห็น IP ของผู้ใช้จริงแทนที่จะเห็นแต่ IP ของ Cloudflare — แก้ที่ต้นเหตุของการแบนผิดตัว
- ติดตั้งระบบเฝ้าดู uptime ที่แจ้งเตือน เพราะ 522 มักเกิดเป็นช่วง ๆ และหายเองก่อนที่คุณจะทันเห็น
- เฝ้าดูแรมและโหลด ตั้งการแจ้งเตือนก่อนถึงขีดจำกัด ดีกว่ามารู้ตอนเว็บล่มแล้ว
- สั่ง systemctl enable บริการทุกตัว เพื่อให้กลับมาเองหลังรีบูต
- เก็บ IP จริงของเซิร์ฟเวอร์ไว้ใช้ทดสอบ เวลาเกิดปัญหาจะได้ยิงตรงข้าม Cloudflare ได้ทันทีโดยไม่ต้องไปหา
อยากคุมไฟร์วอลล์และดู log เองได้ทั้งหมด?
Cloud VPS NVMe สิทธิ์ root เต็ม — ตั้ง allowlist ของ Cloudflare เอง อ่าน log จริง มี VNC ไว้กู้ตอนล็อกตัวเอง เริ่ม ฿150/เดือน
คำถามที่พบบ่อย
Error 522 เป็นปัญหาของ Cloudflare หรือของเซิร์ฟเวอร์เรา
เกือบทุกครั้งเป็นฝั่งเซิร์ฟเวอร์เรา Cloudflare แค่รายงานว่ามันต่อเข้าไปไม่สำเร็จ สาเหตุที่พบบ่อยที่สุดคือไฟร์วอลล์หรือระบบกันบุกรุกบนเซิร์ฟเวอร์บล็อก IP ของ Cloudflare อยู่ ให้เช็ก allowlist ก่อนเป็นอันดับแรก
521 กับ 522 ต่างกันยังไง
521 คือเซิร์ฟเวอร์ปฏิเสธการเชื่อมต่อกลับมาชัด ๆ มักเพราะเว็บเซิร์ฟเวอร์ไม่ได้รันหรือไฟร์วอลล์ตั้ง REJECT ส่วน 522 คือไม่มีคำตอบเลยจนหมดเวลา มักเพราะไฟร์วอลล์ตั้ง DROP หรือเซิร์ฟเวอร์รับงานใหม่ไม่ทัน
เว็บขึ้น 522 เป็นช่วง ๆ แล้วหายเอง เพราะอะไร
อาการนี้ชี้ไปสองอย่างเป็นหลัก หนึ่งคือระบบกันบุกรุกอย่าง fail2ban แบน IP ของ Cloudflare ชั่วคราวแล้วปล่อยเมื่อครบเวลา สองคือเซิร์ฟเวอร์โหลดพีคเป็นช่วงจนรับการเชื่อมต่อใหม่ไม่ทัน ให้ดู log ของ fail2ban และกราฟโหลดในช่วงเวลาที่เกิด
ปิด Cloudflare แล้ว 522 หายไหม
หาย เพราะ 522 เป็น error ที่ Cloudflare สร้างขึ้น แต่นั่นไม่ได้แปลว่าปัญหาหาย — ถ้าสาเหตุจริงคือเซิร์ฟเวอร์รับโหลดไม่ไหว การปิด proxy จะทำให้ผู้เข้าชมเจออาการช้าหรือต่อไม่ติดโดยตรงแทน ควรใช้การปิดชั่วคราวเพื่อวินิจฉัยเท่านั้น
GUIDES
บทความที่เกี่ยวข้อง
อ่านต่อในหัวข้อใกล้เคียง
502 Bad Gateway คืออะไร? เข้าใจว่าใครคุยกับใครไม่รู้เรื่อง
502 ไม่ได้แปลว่าเว็บพัง แต่แปลว่าเซิร์ฟเวอร์สองตัวคุยกันไม่รู้เรื่อง บทความนี้อธิบายว่าใครคือ gateway ใครคือปลายทาง สาเหตุที่พบบ่อย และลำดับการไล่ตรวจที่ใช้ได้จริง
อ่านต่อERR_CONNECTION_REFUSED คืออะไร? อ่านให้ออกว่ามันบอกอะไรเรา
error ตัวนี้มีประโยชน์กว่าที่เห็น เพราะคำว่า "ปฏิเสธ" หมายถึงมีคนรับสายแล้วตอบว่าไม่ ซึ่งตัดสาเหตุทั้งกลุ่มออกได้ทันที ต่างจาก timed out ที่เงียบหายและเดาไม่ถูกว่าพังตรงไหน
อ่านต่อ504 Gateway Timeout คืออะไร? เมื่อการรอนานเกินกลายเป็น error
504 บอกว่ามีงานบางอย่างช้าเกินกว่าที่ระบบจะรอไหว บทความนี้อธิบายว่างานแบบไหนที่มักเป็นต้นเหตุ และทำไมการเพิ่มค่า timeout ถึงเป็นทางแก้ที่ผิดในเกือบทุกกรณี
อ่านต่อ