503 Service Unavailable: โหลดเกินหรืออยู่ในโหมดบำรุงรักษา
· อ่าน 2 นาที
ข้อผิดพลาดนี้หมายถึงอะไร
503 คือเว็บเซิร์ฟเวอร์ที่บอกว่า “ฉันอยู่ที่นี่ แต่ตอนนี้ให้บริการคุณไม่ได้” ไม่เหมือน 502 ที่สิ่งด้านหลังไม่จำเป็นต้องเสียหาย เซิร์ฟเวอร์ส่ง 503 โดยตั้งใจในสามสถานการณ์: อยู่ในโหมดบำรุงรักษา ถึงขีดจำกัดที่ถูกสั่งให้เคารพ (การเชื่อมต่อ worker แบนด์วิดท์ rate limit) หรือโหลดหนักจนต้องทิ้งบางคำขอเพื่อให้ยังทำงานอยู่ได้ 503 อาจมีส่วนหัว Retry-After ที่บอกไคลเอนต์ว่าให้กลับมาเมื่อไร เสิร์ชเอนจินถือว่า 503 ที่สั้นเป็นเรื่องชั่วคราวและไม่ตัดหน้านั้นออก
สาเหตุที่พบบ่อย
- โหมดบำรุงรักษาที่ค้างอยู่ WordPress เขียนไฟล์
.maintenanceระหว่างอัปเดตและตอบ 503 จนกว่าอัปเดตจะเสร็จ หากอัปเดตถูกขัดจังหวะ ไฟล์ยังอยู่ ข้อผิดพลาดก็ยังอยู่ Laravel, Magento, Drupal และเฟรมเวิร์กส่วนใหญ่มีสวิตช์ที่เทียบเท่ากัน - โหลดเกิน คำขอมากกว่าที่ worker ที่ตั้งค่าไว้รับได้
MaxRequestWorkersของ Apache เต็มpm.max_childrenของ PHP-FPM หมด หรือฐานข้อมูลช้าจนทุก worker รอ - ขีดจำกัดของโฮสติ้ง Shared host จำกัดวินาที CPU โพรเซสที่ทำงานพร้อมกัน หรือ “entry processes” ต่อบัญชี เมื่อถึงขีดจำกัด เกตเวย์ของโฮสต์ตอบ 503 เฉพาะเว็บไซต์ของคุณ
- แบ็กเอนด์ถูกถอดออกจากการหมุนเวียน หลัง load balancer หรือ CDN 503 หมายความว่าแบ็กเอนด์ทั้งหมดไม่ผ่านการตรวจ health check Cloudflare แสดงหน้า 503 ของตัวเองเมื่อเซิร์ฟเวอร์ต้นทางโหลดเกินหรือถูกจำกัดอัตรา
- บอทและตัวดึงข้อมูล ตัว crawl ที่ดึงหลายพันหน้า หรือการโจมตีแบบ brute-force ที่
wp-login.phpหรือxmlrpc.phpทำให้ worker หมด และผู้เข้าชมปกติได้ 503 - ดิสก์เต็มหรือหน่วยความจำหมด บริการทำงานอยู่แต่เขียนเซสชัน ไฟล์แคช หรือ log ไม่ได้ และบางแอปพลิเคชันตอบ 503 ในสภาพนั้น
หากคุณเป็นผู้เข้าชม
รอหนึ่งนาทีแล้วโหลดใหม่ 503 มักสั้น หากเว็บไซต์ค้างที่ 503 หลายชั่วโมง เจ้าของมีโหมดบำรุงรักษาที่ค้างหรือปัญหาด้านความจุ และมีเพียงเจ้าของที่แก้ได้
หากเป็นเว็บไซต์ของคุณ: ตรวจสอบก่อน
รันเครื่องมือตรวจว่าเว็บไซต์ล่มหรือไม่เพื่อยืนยัน 503 จากภายนอกและดูว่า CDN หรือเซิร์ฟเวอร์ของคุณเองเป็นผู้ส่ง จากนั้นตัดสินใจ: คุณหรือ CMS ของคุณเริ่มอัปเดตในไม่กี่นาทีที่ผ่านมาไหม ถ้าใช่ นั่นคือโหมดบำรุงรักษา ถ้าไม่ใช่ นั่นคือความจุ
บนเซิร์ฟเวอร์ของคุณเอง:
# เว็บเซิร์ฟเวอร์ทำงานอยู่ไหม
systemctl status nginx
systemctl status apache2
# โหลด หน่วยความจำ ดิสก์: สามตัวเลขที่อยู่เบื้องหลัง 503 ส่วนใหญ่
uptime
free -m
df -h
# ตอนนี้ใครกำลังรัวเว็บไซต์อยู่
sudo tail -n 5000 /var/log/nginx/access.log | awk '{print $1}' | sort | uniq -c | sort -rn | head
load average ที่สูงกว่าจำนวนคอร์ CPU มาก หน่วยความจำว่างน้อยกว่า 100 MB หรือ IP เดียวที่มีหลายพันคำขอในไม่กี่นาทีที่ผ่านมา แต่ละอย่างอธิบาย 503 ได้
วิธีแก้บนเซิร์ฟเวอร์ของคุณเอง
1. ยุติโหมดบำรุงรักษาที่ค้าง
WordPress: ลบไฟล์ .maintenance ในรากของเว็บไซต์ แล้วเปิดเว็บไซต์ หากอัปเดตที่สร้างไฟล์นั้นถูกขัดจังหวะ ปลั๊กอินหรือ core อาจติดตั้งไม่ครบ รันอัปเดตอีกครั้งจากแดชบอร์ดหรือด้วย WP-CLI:
rm /var/www/example.com/.maintenance
wp core verify-checksums
wp plugin update --all
Laravel: php artisan up · Magento: bin/magento maintenance:disable · Drupal: ตั้ง $settings['maintenance_mode'] เป็น false หรือใช้ drush state:set system.maintenance_mode 0
2. หยุดการถล่ม
บล็อก IP หรือเครือข่ายที่เป็นต้นเหตุ แล้วเพิ่ม rate limit เพื่อไม่ให้รายต่อไปทำซ้ำได้
# บล็อกหนึ่งที่อยู่ (Debian/Ubuntu กับ ufw)
sudo ufw deny from 203.0.113.45
# หรือด้วย nftables
sudo nft add rule inet filter input ip saddr 203.0.113.45 drop
nginx rate limit สำหรับหน้าล็อกอิน (ใน http block แล้วใน server block):
limit_req_zone $binary_remote_addr zone=login:10m rate=5r/m;
location = /wp-login.php {
limit_req zone=login burst=5 nodelay;
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php8.3-fpm.sock;
}
Apache: mod_evasive หรือ mod_qos ทำสิ่งเดียวกัน fail2ban กับ jail apache-badbots และ wordpress บล็อกผู้กระทำซ้ำโดยอัตโนมัติ
3. เพิ่มความจุให้เซิร์ฟเวอร์
หากโหลดมาจากทราฟฟิกจริง ไม่ใช่การโจมตี ให้เพิ่มขีดจำกัด worker ภายในที่หน่วยความจำอนุญาต Apache (mpm_event): MaxRequestWorkers PHP-FPM: pm.max_children ตรวจหน่วยความจำต่อ worker ก่อน: ps -ylC php-fpm8.3 --sort:rss จากนั้นทดสอบและรีโหลด:
sudo apachectl configtest && sudo systemctl reload apache2
sudo php-fpm8.3 -t && sudo systemctl reload php8.3-fpm
เปิดการแคชหน้า (WordPress: ปลั๊กอินแคชหรือ FastCGI cache ใน nginx) เพื่อไม่ให้ทราฟฟิกที่พุ่งสูงรัน PHP ทุกคำขอ หน้าที่แคชไว้ใช้เวลาเพียงเสี้ยวมิลลิวินาที หน้า WordPress ที่ไม่มีแคชใช้หลายร้อย
4. เพิ่มพื้นที่ว่างในดิสก์
sudo du -xh --max-depth=1 /var | sort -h | tail
sudo journalctl --vacuum-size=200M
sudo apt clean
ไฟล์ log เก่า ข้อมูลสำรองที่เก็บไว้บนดิสก์เดียวกัน และ debug log ที่โตไม่หยุดคือผู้ต้องสงสัยทั่วไป
5. หลัง load balancer
แบ็กเอนด์ทั้งหมดไม่ผ่าน health check พร้อมกันมักหมายความว่า URL ที่ใช้ตรวจเองเสีย (หน้า health ถูกลบ การเปลี่ยนเส้นทางไป HTTPS ที่ตัวตรวจไม่ตาม) มากกว่าที่ทุกแบ็กเอนด์เสีย ดึง URL health ด้วยมือจาก balancer
เมื่อเป็นปัญหาของผู้ให้บริการโฮสติ้ง
บน shared hosting คุณเพิ่มขีดจำกัดไม่ได้ ถามผู้ให้บริการโฮสติ้งว่าคุณถึงขีดจำกัดอะไร และเป็นทราฟฟิกของคุณหรือบัญชีอื่นบนเซิร์ฟเวอร์เดียวกัน:
สวัสดี เว็บไซต์ของฉัน example.com ตอบ “503 Service Unavailable” ตั้งแต่ประมาณ 09:10 UTC ฉันไม่ได้เริ่มอัปเดตและเว็บไซต์ไม่ได้อยู่ในโหมดบำรุงรักษา กรุณาบอกว่าบัญชีของฉันถึงขีดจำกัดทรัพยากร (CPU โพรเซส หน่วยความจำ) หรือเซิร์ฟเวอร์โหลดเกิน และตัวเลขเป็นเท่าไร หากเป็นบัญชีของฉัน ขีดจำกัดอะไรและตั้งแต่เมื่อไร
หากคำตอบคือ “บัญชีของคุณถึงขีดจำกัด” เป็นประจำ ให้แคชเว็บไซต์ให้ถูกต้อง หรือย้ายไปแพ็กเกจหรือเซิร์ฟเวอร์ที่มีความจุมากกว่า
ป้องกันครั้งต่อไป
503 ประกาศตัวเอง: โหลดค่อย ๆ เพิ่ม หน่วยความจำหมด IP หนึ่งเริ่มถล่ม การตรวจสอบเว็บไซต์จับ 503 ได้ภายในหนึ่งนาที เซิร์ฟเวอร์เอเจนต์แสดงโหลด หน่วยความจำ และดิสก์ก่อนจะถึงขั้นนั้น บนเซิร์ฟเวอร์ของคุณเอง Quick Fix เพิ่มพื้นที่ว่างในดิสก์และรีสตาร์ทบริการที่ค้างในราคาคงที่ และ Deep Fix ตั้งค่า rate limit และการแคชเพื่อให้เซิร์ฟเวอร์ยังทำงานอยู่ในครั้งหน้า
ขั้นต่อไป
ตรวจจากภายนอก
เว็บไซต์ล่มสำหรับทุกคนหรือเฉพาะคุณ และเซิร์ฟเวอร์ตอบกลับอย่างไร ฟรี ไม่ต้องสมัคร
เครื่องมือตรวจว่าเว็บไซต์ล่มหรือไม่ล่มใช่ไหม เราเข้าไปจัดการ
บนเซิร์ฟเวอร์ของคุณเองหรือเว็บสเปซที่มี SSH: Quick Fix ในราคาคงที่สำหรับสาเหตุที่พบบ่อย Deep Fix คิดเป็นช่วงละ 15 นาทีสำหรับส่วนที่เหลือ ตลอด 24 ชั่วโมง เห็นราคาก่อนสั่งซื้อ
ให้เราซ่อมแซมคู่มืออื่น ๆ
- เว็บไซต์ของคุณล่ม นี่คือสิ่งที่ต้องทำใน 15 นาทีแรก
- เซิร์ฟเวอร์ล่ม: ต้องตรวจอะไรก่อน และตามลำดับไหน
- 502 Bad Gateway: สาเหตุและวิธีแก้
- 504 Gateway Timeout: หมายถึงอะไรและแก้อย่างไร
- DNS_PROBE_FINISHED_NXDOMAIN: สาเหตุและวิธีแก้
- ERR_CONNECTION_REFUSED: สาเหตุและวิธีแก้
- “การเชื่อมต่อของคุณไม่เป็นส่วนตัว”: คำเตือนใบรับรอง SSL