503 Service Unavailable nghĩa là máy chủ đang chạy, hiểu yêu cầu hoàn hảo, và từ chối phục vụ ngay lúc này. Đó là điểm khác biệt quan trọng so với 500 hay 502 — không có gì hỏng theo nghĩa thông thường, chỉ là dịch vụ tạm thời không sẵn sàng.
Vì vậy 503 chia làm hai nhóm rất khác nhau. Nhóm thứ nhất là cố ý: bạn bật chế độ bảo trì, hoặc một quy tắc giới hạn tốc độ đang làm đúng việc của nó. Nhóm thứ hai là ngoài ý muốn: máy chủ đã quá tải tới mức tự bảo vệ bằng cách ngừng nhận yêu cầu mới. Việc đầu tiên cần làm luôn là xác định mình đang ở nhóm nào.
503 khác 500, 502 và 504 ra sao
Cả bốn đều là lỗi 5xx nên trông giống nhau với khách, nhưng nguyên nhân nằm ở những chỗ hoàn toàn khác nhau.
| Mã | Chuyện gì đã xảy ra | Có chủ đích không |
|---|---|---|
| 503 Service Unavailable | Máy chủ từ chối nhận việc lúc này | Thường là có |
| 500 Internal Server Error | Code chạy lỗi giữa chừng | Không |
| 502 Bad Gateway | Backend chết hoặc trả phản hồi hỏng | Không |
| 504 Gateway Timeout | Backend còn sống nhưng quá chậm | Không |
Nguyên nhân thường gặp, phổ biến nhất trước
- Chế độ bảo trì bị kẹt. Trên WordPress, một lần cập nhật thất bại để lại file .maintenance ở thư mục gốc và website báo 503 mãi cho tới khi bạn xóa file đó.
- Cạn worker của PHP-FPM. Mọi tiến trình đều bận, hàng đợi đầy, và process manager bắt đầu từ chối yêu cầu mới thay vì xếp hàng vô hạn.
- Hết RAM. Kernel giết tiến trình để giải phóng bộ nhớ, dịch vụ nửa sống nửa chết, và proxy phía trước trả về 503.
- Plugin hoặc theme lỗi làm sập PHP hàng loạt. Thường đi kèm 500 xen kẽ, và luôn bắt đầu ngay sau một lần cập nhật.
- Giới hạn tốc độ hoặc quy tắc chống DDoS. Cloudflare, ModSecurity và các module rate-limit đều dùng 503 khi chặn lưu lượng vượt ngưỡng.
- Tăng đột biến lượt truy cập vượt sức máy chủ. Một bài viết lan truyền hoặc một đợt bot quét mạnh đều tạo ra cùng một triệu chứng.
- Dịch vụ backend chưa khởi động xong. Sau khi reboot, Nginx lên trước ứng dụng vài giây và mọi yêu cầu trong khoảng đó nhận 503.
Kiểm tra theo thứ tự này
- Nếu là WordPress, kiểm tra file .maintenance ở thư mục gốc trước tiên. Nó xuất hiện khi cập nhật bị gián đoạn, và xóa nó là cách sửa mất đúng năm giây.
- Xác nhận dịch vụ backend đang chạy. Chạy "systemctl status php8.2-fpm" hoặc lệnh tương ứng với stack của bạn; nếu nó đã chết, khởi động lại rồi mới đọc log để hiểu vì sao.
- Kiểm tra RAM bằng "free -m" và tìm dấu vết OOM killer bằng "dmesg | grep -i oom". Nếu kernel đã giết tiến trình, mọi thứ khác chỉ là hệ quả.
- Xem log của PHP-FPM tìm dòng cảnh báo về pm.max_children. Nếu có, bạn đang cạn worker và cần xử lý phần chậm giữ chúng lại, chứ không đơn thuần tăng số worker.
- Đọc error log của Nginx hoặc Apache trong lúc tải lại trang. 503 do rate-limit trông rất khác 503 do backend chết, và log nói rõ điều đó.
- Nếu website đứng sau Cloudflare, kiểm tra xem trang lỗi đến từ Cloudflare hay từ máy chủ. Trang của Cloudflare có ray ID; nếu vậy quy tắc nằm trong bảng điều khiển của họ.
- Nếu chỉ mới xảy ra sau một bản cập nhật, tắt plugin gần nhất qua FTP bằng cách đổi tên thư mục của nó. Đây là kiểm tra nhanh nhất khi bạn không vào được trang admin.
Cách dùng 503 đúng khi bảo trì
Khi bạn chủ động tắt website để cập nhật, 503 chính là mã đúng — miễn là bạn gửi kèm thông tin cần thiết.
Luôn kèm header Retry-After với số giây hoặc một mốc thời gian cụ thể. Nó cho công cụ tìm kiếm biết đây là tình trạng tạm thời và nên quay lại lúc nào, thay vì để chúng tự đoán.
Đừng bao giờ dùng 200 cho trang bảo trì. Trang thông báo "chúng tôi sẽ trở lại" trả về mã thành công là lời mời Google đưa nội dung đó vào chỉ mục thay cho nội dung thật của bạn — và việc phục hồi tốn thời gian hơn nhiều so với chính đợt bảo trì.
Đừng dùng 302 chuyển hướng sang trang bảo trì. Cách này làm mất URL gốc trong mắt trình thu thập và tạo ra một trang mới không mong muốn trong chỉ mục.
Giữ thời gian bảo trì ngắn. Google chấp nhận 503 trong vài giờ tới vài ngày mà không có hậu quả gì; kéo dài hàng tuần thì các URL sẽ bắt đầu rời chỉ mục.
Khi 503 cứ quay lại
503 lẻ tẻ vào giờ cao điểm là một thông điệp về sức chứa, không phải một lỗi cần vá. Máy chủ đang nói rằng nhu cầu vượt quá khả năng phục vụ đồng thời của nó.
Việc đầu tiên nên làm là bật cache trang. Website nội dung phục vụ HTML tĩnh sẽ giảm số yêu cầu chạm tới PHP xuống một phần nhỏ, và rất nhiều trường hợp 503 định kỳ biến mất hoàn toàn chỉ với bước này.
Tiếp theo là tìm truy vấn chậm. Worker bị giữ lại lâu chính là lý do khiến chúng cạn kiệt; sửa một truy vấn thiếu index thường giải phóng nhiều sức chứa hơn cả việc tăng gấp đôi số worker.
Chỉ sau khi đã cache và đã tối ưu, việc thiếu tài nguyên mới là kết luận hợp lý. Lúc đó dấu hiệu sẽ rất rõ: CPU cao liên tục, RAM cạn và swap hoạt động không ngừng ngay cả khi lưu lượng bình thường.
Cần sức chứa ổn định thay vì chạm trần vào giờ cao điểm?
Cloud VPS NVMe với tài nguyên riêng và quyền root đầy đủ — tự chỉnh worker, cache và giới hạn tốc độ. Từ ฿150/tháng.
Câu hỏi thường gặp
WordPress của tôi báo 503 sau khi cập nhật. Sửa thế nào?
Vào thư mục gốc website qua FTP hoặc File Manager và xóa file có tên .maintenance. WordPress tạo file này khi bắt đầu cập nhật và xóa nó khi xong; nếu quá trình bị gián đoạn, file ở lại và mọi khách truy cập đều nhận 503.
503 kéo dài bao lâu thì ảnh hưởng thứ hạng?
Vài giờ thì gần như không ảnh hưởng gì — Google hiểu 503 là tạm thời và sẽ quay lại. Kéo dài nhiều ngày thì tốc độ thu thập giảm, và sau khoảng một tuần các URL bắt đầu rời chỉ mục. Header Retry-After giúp Google chọn thời điểm quay lại hợp lý hơn.
Làm sao biết 503 đến từ máy chủ hay từ Cloudflare?
Trang lỗi của Cloudflare có nhận diện thương hiệu và kèm ray ID ở cuối trang; 503 của máy chủ là trang đơn giản từ Nginx hoặc Apache. Nếu là Cloudflare, hãy tìm trong quy tắc tường lửa và cấu hình rate-limit của họ chứ không phải trên máy chủ.
Tăng pm.max_children có sửa được 503 không?
Đôi khi, nhưng thường là sai hướng. Mỗi worker chiếm RAM, nên tăng quá tay sẽ biến 503 thành lỗi hết bộ nhớ. Hãy tìm nguyên nhân giữ worker quá lâu trước — gần như luôn là một truy vấn chậm hoặc một lệnh gọi API không đặt timeout.
GUIDES
Bài viết liên quan
Đọc tiếp các chủ đề tương tự
502 Bad Gateway — Ý nghĩa và cách khắc phục
502 nghĩa là một máy chủ đã hỏi máy chủ khác để lấy trang và nhận về thứ không dùng được. Bài này giải thích hai máy nào đang liên quan, khác biệt với 500 và 504, cùng thứ tự kiểm tra để bạn tìm đúng nguyên nhân trước tiên.
Đọc tiếp504 Gateway Timeout — Nguyên nhân và cách khắc phục
504 không phải backend chết, mà là backend còn sống nhưng quá chậm. Điều đó đổi hoàn toàn chỗ bạn cần tìm: không phải log crash, mà là truy vấn hoặc lệnh gọi bên ngoài đang chạy lâu hơn thời gian máy chủ chịu chờ.
Đọc tiếp500 Internal Server Error — Nguyên nhân và cách sửa
500 là lỗi ít thông tin nhất trên web: nó nghĩa là "có gì đó hỏng và tôi sẽ không nói là gì". Tin tốt là máy chủ gần như luôn ghi lý do thật vào một file log. Bài này chỉ chỗ file đó và thứ tự kiểm tra nhanh nhất để tìm ra thủ phạm.
Đọc tiếp