การปิด xmlrpc.php บน Nginx ทำได้โดยการเพิ่มบล็อกคำสั่งเข้าไปในไฟล์คอนฟิกของเว็บไซต์ (Server Block) เพื่อดักจับทุก Request ที่เรียกไฟล์นี้และตัดการเชื่อมต่อทันที
วิธีตั้งค่า
เปิดไฟล์คอนฟิกของไซต์ (เช่น /etc/nginx/sites-available/your-domain.conf หรือ /etc/nginx/conf.d/default.conf) แล้วเลือกใช้วิธีใดวิธีหนึ่งด้านล่างนี้ โดยวางไว้ภายในบล็อก server { ... }
แบบที่ 1: ตอบกลับด้วย 403 Forbidden (มาตรฐานที่นิยมใช้)
วิธีนี้จะปฏิเสธคำขอทันทีและส่งโค้ด HTTP 403 กลับไป พร้อมปิดการบันทึก Access/Error Log เพื่อไม่ให้ไฟล์ Log บวมจากการโดนบอทยิงถล่ม
location = /xmlrpc.php {
deny all;
access_log off;
log_not_found off;
}
แบบที่ 2: ตัดการเชื่อมต่อทันที (Drop Connection – รหัส 444)
Nginx มีรหัสพิเศษคือ 444 ซึ่งจะสั่งตัดการเชื่อมต่อทันทีโดยไม่ส่ง Header หรือข้อมูลใด ๆ ตอบกลับ ช่วยประหยัดแบนด์วิดท์และทรัพยากรเครื่องได้สูงสุดเมื่อถูกบอทสแกน
location = /xmlrpc.php {
access_log off;
log_not_found off;
return 444;
}
กรณีพิเศษ: ต้องการอนุญาตเฉพาะ IP ของเราหรือบริการบางตัว (Whitelist)
หากคุณใช้บริการอย่าง Jetpack หรือแอปมือถือที่จำเป็นต้องคุยผ่าน XML-RPC สามารถกำหนดสิทธิ์ให้อนุญาตเฉพาะ IP นั้นๆ ได้
location = /xmlrpc.php {
allow 203.0.113.15; # ไอพีแอดมินหรือเซิร์ฟเวอร์ที่อนุญาต
# allow 192.0.64.0/18; # ซับเน็ต Jetpack / Automattic (ตัวอย่าง)
deny all;
access_log off;
log_not_found off;
}
ขั้นตอนการทดสอบและโหลดคอนฟิกใหม่
- ตรวจสอบความถูกต้องของ Syntax:Bash
sudo nginx -tต้องขึ้นsyntax is okและtest is successful - Reload การตั้งค่า Nginx:Bash
sudo systemctl reload nginx - ทดสอบผลลัพธ์ด้วย cURL:Bash
curl -I https://yourdomain.com/xmlrpc.phpระบบควรตอบกลับด้วยHTTP/1.1 403 Forbidden(หรือ connection reset หากใช้ 444)
อ่านเพิ่มเติม