Lỗi HTTP 503 Service Unavailable: Nguyên nhân và Cách khắc phục

Lỗi HTTP 503 là gì?
Lỗi HTTP 503 (Service Unavailable) là mã trạng thái phía máy chủ cho biết máy chủ web tạm thời không thể xử lý yêu cầu của bạn. Khác với lỗi 404 (không tìm thấy trang) hay lỗi 500 (lỗi máy chủ nội bộ), lỗi 503 chỉ rõ đây là tình trạng tạm thời — máy chủ vẫn tồn tại và có thể truy cập được, nhưng hiện tại không thể phục vụ nội dung.
Theo đặc tả HTTP (RFC 9110), máy chủ CÓ THỂ gửi kèm header Retry-After để cho biết khách hàng nên đợi bao lâu trước khi thử lại. Header này thông báo cho trình duyệt, bot công cụ tìm kiếm và các ứng dụng API biết khi nào dịch vụ dự kiến hoạt động trở lại.
Từ khóa quan trọng ở đây là "tạm thời". Một phản hồi 503 được cấu hình đúng sẽ báo cho Google và các công cụ tìm kiếm khác quay lại sau thay vì xóa trang khỏi chỉ mục. Đó là lý do các trang web sử dụng 503 trong thời gian bảo trì có kế hoạch — nó giúp bảo toàn thứ hạng SEO.
Lỗi 503 trông như thế nào
Bất kể nội dung thông báo như thế nào, nguyên nhân gốc luôn giống nhau: máy chủ đã nhận yêu cầu của bạn nhưng hiện tại không thể thực hiện.
503 Service Unavailable
503 Service Temporarily Unavailable
HTTP Error 503. The service is unavailable.
Error 503 Backend Fetch Failed (Varnish cache)
503 Service Unavailable — No server is available to handle this request (Apache)
503 Service Temporarily Unavailable — nginx (Nginx)
Error 503 (Service Unavailable)!! 1 (lỗi origin Cloudflare)
Site is temporarily unavailable hoặc Briefly unavailable for scheduled maintenance (WordPress)
Nguyên nhân phổ biến của lỗi HTTP 503
Hiểu rõ nguyên nhân gốc là con đường nhanh nhất để khắc phục. Dưới đây là những lý do phổ biến nhất khiến máy chủ trả về lỗi 503, được xếp theo tần suất.
Máy chủ quá tải — Máy chủ đã đạt giới hạn CPU, RAM hoặc số kết nối. Điều này xảy ra khi có đột biến lưu lượng truy cập, nội dung lan truyền (viral), hoặc khi bot quét trang web quá mạnh.
Bảo trì có kế hoạch — Quản trị viên cố ý đưa máy chủ offline để cập nhật, chuyển đổi hoặc triển khai. Trang bảo trì được cấu hình đúng sẽ trả về 503 kèm header Retry-After.
Plugin hoặc theme lỗi — Trên các nền tảng CMS như WordPress, Joomla hoặc Magento, một plugin bị lỗi, xung đột khi cập nhật theme hoặc phiên bản PHP không tương thích có thể làm ứng dụng crash và gây ra lỗi 503.
PHP-FPM hoặc ứng dụng backend bị crash — Trình quản lý PHP (php-fpm) hết tiến trình worker, hoặc ứng dụng backend (Node.js, Python, Ruby) bị crash. Web server (Nginx/Apache) vẫn chạy nhưng không có backend nào để chuyển tiếp yêu cầu.
Cơ sở dữ liệu quá tải — Cơ sở dữ liệu (MySQL, PostgreSQL) đạt giới hạn kết nối, hết bộ nhớ hoặc bị khóa bởi truy vấn chạy quá lâu. Ứng dụng không thể lấy dữ liệu nên trả về 503.
Tấn công DDoS — Tấn công từ chối dịch vụ phân tán làm tràn ngập máy chủ với hàng loạt yêu cầu, cạn kiệt tài nguyên và khiến các yêu cầu hợp lệ bị lỗi 503.
Cấu hình DNS hoặc CDN sai — Cloudflare, AWS CloudFront hoặc CDN khác không thể kết nối đến máy chủ origin do thay đổi DNS, SSL hết hạn hoặc danh sách IP whitelist.
Vượt giới hạn tài nguyên — Các gói hosting chia sẻ có giới hạn chặt về CPU, RAM và số kết nối đồng thời. Vượt quá các giới hạn này khiến nhà cung cấp hosting chặn yêu cầu với lỗi 503.
Cách khắc phục cho người truy cập
Nếu bạn là người truy cập gặp lỗi 503 trên trang web của người khác, vấn đề nằm ở máy chủ của họ — không phải thiết bị của bạn. Tuy nhiên, có một vài điều bạn có thể thử.
Đợi và tải lại trang — Vì 503 là tạm thời, hãy đợi 30-60 giây rồi tải lại trang. Máy chủ có thể đang khởi động lại hoặc hoàn tất quá trình triển khai.
Kiểm tra xem trang web có bị sập cho tất cả mọi người không — Sử dụng công cụ HTTP Headers của DNS Robot để kiểm tra mã phản hồi của máy chủ từ bên ngoài. Nếu trả về 503 cho tất cả, trang web thực sự đang bị sập.
Xóa bộ nhớ đệm trình duyệt — Trong một số trường hợp hiếm, trình duyệt có thể đã lưu cache trang 503. Xóa bộ nhớ đệm và thử lại.
Thử trình duyệt hoặc thiết bị khác — Loại trừ các vấn đề về bộ nhớ đệm hoặc tiện ích mở rộng riêng của trình duyệt.
Kiểm tra mạng xã hội của trang web — Trang web có thể đã đăng thông báo bảo trì hoặc sự cố trên X (Twitter) hoặc trang trạng thái của họ.
Cách 1: Khởi động lại Web Server
Sau khi khởi động lại, hãy kiểm tra trang web ngay lập tức. Nếu lỗi 503 quay lại trong vài phút, nguyên nhân gốc vẫn còn — hãy chuyển sang kiểm tra nhật ký và tài nguyên.
# Restart Nginx
sudo systemctl restart nginx
# Restart Apache
sudo systemctl restart apache2 # Debian/Ubuntu
sudo systemctl restart httpd # CentOS/RHEL
# Restart PHP-FPM
sudo systemctl restart php8.2-fpm # Adjust version as needed
# Restart Node.js (PM2)
pm2 restart all
# Restart entire server (last resort)
sudo rebootCách 2: Kiểm tra tài nguyên máy chủ (CPU, RAM, Ổ đĩa)
Nếu CPU hoặc RAM đạt trên 90%, bạn cần tối ưu hóa ứng dụng, tắt các tiến trình chạy lạc hoặc nâng cấp máy chủ. Nếu ổ đĩa đầy, hãy xóa tệp nhật ký, bản sao lưu cũ hoặc tệp tạm.
# Check CPU and memory usage
top -bn1 | head -20
# Check disk space
df -h
# Check memory in detail
free -m
# Check active connections
ss -s
# Find processes using the most memory
ps aux --sort=-%mem | head -10
# Find processes using the most CPU
ps aux --sort=-%cpu | head -10Cách 3: Kiểm tra nhật ký lỗi
Các thông báo nhật ký phổ biến gây ra lỗi 503:
"upstream timed out" hoặc "no live upstreams" (Nginx) — PHP-FPM hoặc ứng dụng backend không phản hồi. Khởi động lại php-fpm hoặc tăng thời gian chờ.
"server reached pm.max_children" (PHP-FPM) — Tất cả tiến trình PHP worker đều đang bận. Tăng pm.max_children trong cấu hình pool PHP-FPM.
"Too many connections" (MySQL) — Giới hạn kết nối cơ sở dữ liệu đã cạn kiệt. Tăng max_connections trong cấu hình MySQL hoặc tối ưu hóa truy vấn.
"Cannot allocate memory" — Máy chủ hết RAM. Tắt các tiến trình không cần thiết hoặc thêm swap space.
# Nginx error log
tail -50 /var/log/nginx/error.log
# Apache error log
tail -50 /var/log/apache2/error.log # Debian/Ubuntu
tail -50 /var/log/httpd/error_log # CentOS/RHEL
# PHP-FPM log
tail -50 /var/log/php8.2-fpm.log
# WordPress debug log (if WP_DEBUG_LOG is enabled)
tail -50 /var/www/html/wp-content/debug.log
# System log
tail -50 /var/log/syslogCách 4: Tắt Plugin và Theme (WordPress / CMS)
Sau khi xác định được plugin lỗi, hãy cập nhật nó, thay thế bằng plugin khác hoặc liên hệ với nhà phát triển plugin. Đồng thời kiểm tra phiên bản PHP của bạn có tương thích không — một số plugin bị lỗi khi máy chủ nâng cấp PHP.
# Disable all plugins by renaming the plugins folder
cd /var/www/html/wp-content
mv plugins plugins_disabled
# If the site loads, rename it back and re-enable plugins one by one
mv plugins_disabled plugins
# To disable a single plugin
mv plugins/problem-plugin plugins/problem-plugin.disabledCách 5: Tăng giới hạn PHP và máy chủ
Nếu máy chủ hết PHP worker hoặc đạt giới hạn bộ nhớ, bạn cần tăng các giới hạn trong cấu hình.
# PHP-FPM pool config (e.g., /etc/php/8.2/fpm/pool.d/www.conf)
pm = dynamic
pm.max_children = 50 # Increase from default (5-10)
pm.start_servers = 10
pm.min_spare_servers = 5
pm.max_spare_servers = 20
pm.max_requests = 500
# PHP memory limit (php.ini)
memory_limit = 256M # Increase from default 128M
max_execution_time = 300 # Increase from default 30
# Restart PHP-FPM after changes
sudo systemctl restart php8.2-fpmCách 6: Kiểm tra cấu hình DNS và CDN
Để chẩn đoán, hãy sử dụng DNS Lookup của DNS Robot để xác minh tên miền trỏ đến đúng IP. Sử dụng công cụ HTTP Headers của DNS Robot để kiểm tra mã trạng thái máy chủ trả về. Nếu DNS trỏ đến Cloudflare nhưng IP origin đã thay đổi, hãy cập nhật bản ghi A trong bảng điều khiển Cloudflare.
503 có thương hiệu Cloudflare: Trang lỗi có logo Cloudflare — nghĩa là trung tâm dữ liệu của Cloudflare đang gặp sự cố (hiếm gặp).
503 từ origin qua Cloudflare: Trang lỗi hiển thị đơn giản hoặc có giao diện trang web của bạn — nghĩa là máy chủ origin đã trả về 503 và Cloudflare chuyển tiếp nó.
Cách 7: Kiểm tra tấn công DDoS hoặc Bot
Nếu bạn thấy hàng nghìn yêu cầu từ một IP hoặc một dải IP nhỏ, hãy chặn chúng ở cấp tường lửa. Với tấn công DDoS quy mô lớn, hãy bật chế độ "Under Attack Mode" của Cloudflare hoặc sử dụng dịch vụ chống DDoS của nhà cung cấp hosting. Bạn có thể sử dụng công cụ IP Blacklist Checker của DNS Robot để kiểm tra xem các IP tấn công đã nằm trong danh sách đen chưa.
# Count requests per IP in the last 1000 lines
tail -1000 /var/log/nginx/access.log | awk '{print $1}' | sort | uniq -c | sort -rn | head -20
# Check requests per second
awk '{print $4}' /var/log/nginx/access.log | cut -d: -f1-3 | uniq -c | sort -rn | head -10
# Block an abusive IP with iptables
sudo iptables -A INPUT -s 1.2.3.4 -j DROP
# Or block with Nginx
# Add to server block: deny 1.2.3.4;Cách 8: Khắc phục sự cố kết nối cơ sở dữ liệu
Nếu bạn thấy nhiều kết nối đang ở trạng thái sleeping, ứng dụng của bạn không đóng kết nối cơ sở dữ liệu đúng cách. Nếu các truy vấn chạy quá lâu đang chặn các truy vấn khác, hãy tối ưu hóa chúng hoặc tắt chúng để giải phóng cơ sở dữ liệu.
# Check if MySQL/MariaDB is running
sudo systemctl status mysql
# Restart MySQL
sudo systemctl restart mysql
# Check current connections vs limit
mysql -e "SHOW STATUS LIKE 'Threads_connected';"
mysql -e "SHOW VARIABLES LIKE 'max_connections';"
# Increase max connections (temporary)
mysql -e "SET GLOBAL max_connections = 200;"
# Check for long-running queries
mysql -e "SHOW PROCESSLIST;" | head -20Cách 9: Liên hệ nhà cung cấp Hosting
Nếu bạn sử dụng hosting chia sẻ, hosting WordPress quản lý, hoặc nền tảng như Squarespace, Wix hay Shopify, bạn có thể không có quyền truy cập nhật ký máy chủ hoặc khả năng khởi động lại dịch vụ. Trong trường hợp này, lỗi 503 có thể do hạ tầng của nhà cung cấp hosting.
Hãy liên hệ bộ phận hỗ trợ của nhà cung cấp hosting và cung cấp:
URL chính xác trả về lỗi 503
Thời điểm lỗi bắt đầu — ghi rõ ngày và giờ
Những gì đã thay đổi — bạn có cài plugin, cập nhật theme hoặc thay đổi cài đặt DNS không?
Lỗi xảy ra liên tục hay ngắt quãng — lỗi 503 ngắt quãng gợi ý giới hạn tài nguyên; lỗi 503 liên tục gợi ý crash hoặc cấu hình sai
So sánh 503 với các lỗi HTTP khác
Điểm khác biệt chính: 503 rõ ràng là tạm thời. Phản hồi 503 được cấu hình tốt bao gồm header Retry-After cho biết khách hàng chính xác khi nào nên quay lại. Google xử lý 503 khác với 500 — nó sẽ thử lại và giữ nguyên thứ hạng của bạn nếu sự cố ngắn.
| Mã lỗi | Tên | Ý nghĩa | Tạm thời? |
|---|---|---|---|
| 500 | Internal Server Error | Máy chủ gặp lỗi không mong đợi (bug, crash, cấu hình sai) | Có thể |
| 502 | Bad Gateway | Proxy/load balancer nhận phản hồi không hợp lệ từ máy chủ upstream | Có thể |
| 503 | Service Unavailable | Máy chủ hoạt động nhưng tạm thời không thể xử lý yêu cầu (quá tải, bảo trì) | Có |
| 504 | Gateway Timeout | Proxy/load balancer không nhận được phản hồi từ máy chủ upstream trong thời gian cho phép | Có thể |
| 520-530 | Cloudflare Errors | Lỗi riêng của Cloudflare liên quan đến sự cố kết nối origin | Tùy trường hợp |
Cách phòng ngừa lỗi 503
Phòng bệnh hơn chữa bệnh. Dưới đây là các phương pháp tốt nhất để tránh lỗi 503.
Giám sát tài nguyên máy chủ — Thiết lập cảnh báo khi CPU > 80%, RAM > 85% và ổ đĩa > 90%. Các công cụ như UptimeRobot, Pingdom hoặc Grafana cung cấp thông báo tức thì.
Sử dụng CDN — Cloudflare, Fastly hoặc AWS CloudFront lưu cache tài nguyên tĩnh và hấp thụ đột biến lưu lượng, giảm tải cho máy chủ origin.
Bật bộ nhớ đệm — Sử dụng Redis, Memcached hoặc Varnish để cache truy vấn cơ sở dữ liệu và trang đã render. Người dùng WordPress: cài plugin cache như WP Super Cache hoặc W3 Total Cache.
Tự động mở rộng — Nếu bạn sử dụng hosting đám mây (AWS, GCP, Azure, DigitalOcean), cấu hình auto-scaling để thêm máy chủ khi có đột biến lưu lượng.
Giới hạn tốc độ bot — Cấu hình Nginx hoặc Cloudflare để giới hạn tốc độ cho crawler và scraper trước khi chúng làm quá tải máy chủ.
Tối ưu hóa truy vấn cơ sở dữ liệu — Truy vấn chậm là nguyên nhân số 1 gây lỗi 503 liên quan đến cơ sở dữ liệu. Thêm chỉ mục, tối ưu hóa join và sử dụng query caching.
Sử dụng trang bảo trì đúng cách — Trong quá trình triển khai, trả về 503 kèm header
Retry-Afterthay vì để máy chủ crash. Điều này giữ được SEO và thông báo cho người dùng.Cập nhật phần mềm — Cập nhật CMS, plugin, PHP và cơ sở dữ liệu lên phiên bản ổn định mới nhất để tránh bug và lỗ hổng bảo mật đã biết.
Kiểm tra xem trang web có đang trả về lỗi 503 không
Sử dụng công cụ HTTP Headers miễn phí của DNS Robot để kiểm tra mã phản hồi HTTP, header và thông tin máy chủ của bất kỳ trang web nào. Xem ngay lập tức trang web có đang trả về 503 Service Unavailable hay không.
Try HTTP Headers CheckerFrequently Asked Questions
Lỗi HTTP 503 (Service Unavailable) có nghĩa là máy chủ web tạm thời không thể xử lý yêu cầu của bạn. Máy chủ vẫn truy cập được nhưng đang quá tải, đang bảo trì hoặc ứng dụng backend đã bị crash. Đây là tình trạng tạm thời — trang web sẽ tự hoạt động trở lại.