Lỗi HTTP 500 Internal Server Error: Nguyên nhân và Cách khắc phục

Lỗi HTTP 500 là gì?
Lỗi HTTP 500 (Internal Server Error) là mã trạng thái phía máy chủ cho biết web server gặp một tình trạng bất ngờ khiến nó không thể thực hiện yêu cầu của bạn. Đây là lỗi máy chủ chung nhất -- cách máy chủ nói rằng 'có gì đó bị hỏng, nhưng tôi không biết chính xác là gì.'
Theo đặc tả HTTP (RFC 9110, Mục 15.6.1), phản hồi 500 được sử dụng khi máy chủ không tìm thấy mã trạng thái 5xx cụ thể hơn để mô tả vấn đề. Khác với lỗi 503 (báo hiệu tình trạng tạm thời), lỗi 500 không cho biết vấn đề là tạm thời hay vĩnh viễn.
Điểm quan trọng là lỗi 500 hầu như luôn do bug, cấu hình sai hoặc crash trong mã phía máy chủ -- không phải do bất kỳ điều gì người truy cập làm sai. Việc khắc phục phải đến từ chủ website hoặc quản trị viên máy chủ.
Lỗi 500 trông như thế nào
Lỗi 500 hiển thị khác nhau tùy thuộc vào web server, nhà cung cấp hosting và CMS. Dưới đây là những thông báo phổ biến nhất mà bạn sẽ gặp.
500 Internal Server Error -- thông báo chuẩn
HTTP Error 500 -- phổ biến trên thanh địa chỉ trình duyệt
Internal Server Error -- văn bản chung không có mã trạng thái
The server encountered an internal error or misconfiguration -- thông báo mặc định của Apache
500 Internal Server Error -- nginx -- trang lỗi tối giản của Nginx
There has been a critical error on this website -- WordPress (từ phiên bản 5.2)
HTTP Error 500.19 -- Internal Server Error -- IIS với mã trạng thái phụ
500. That's an error. -- trang lỗi riêng của Google
Nguyên nhân phổ biến của lỗi HTTP 500
Lỗi 500 có thể bị kích hoạt bởi hàng chục vấn đề khác nhau phía máy chủ. Dưới đây là những nguyên nhân phổ biến nhất, được xếp theo tần suất xuất hiện.
Tệp .htaccess bị lỗi -- Một ký tự đặt sai hoặc chỉ thị không hợp lệ trong .htaccess sẽ làm crash Apache ngay lập tức. Đây là nguyên nhân số 1 trên hosting chia sẻ.
Lỗi PHP nghiêm trọng -- Lỗi cú pháp, exception không được xử lý hoặc gọi hàm chưa định nghĩa sẽ dừng thực thi script và tạo ra lỗi 500.
Hết giới hạn bộ nhớ PHP -- Script vượt quá memory_limit (mặc định 128M) sẽ crash mà không có cảnh báo. Xử lý hình ảnh lớn và truy vấn cơ sở dữ liệu phức tạp là nguyên nhân thường gặp.
Quyền truy cập tệp sai -- Tệp nên là 644, thư mục là 755. Quyền hạn quá nghiêm ngặt (hoặc 777 nguy hiểm) đều gây vấn đề.
Xung đột plugin hoặc theme -- Plugin mới cập nhật hoặc không tương thích có thể làm crash toàn bộ ứng dụng. Đây là nguyên nhân phổ biến nhất đặc thù cho WordPress.
Lỗi kết nối cơ sở dữ liệu -- Thông tin đăng nhập sai, máy chủ cơ sở dữ liệu bị crash hoặc vượt giới hạn kết nối khiến ứng dụng không thể chạy.
Script hết thời gian -- Script chạy lâu vượt quá max_execution_time (mặc định 30 giây) và bị máy chủ dừng.
Tệp lõi CMS bị hỏng -- Cập nhật lỗi hoặc truyền tệp bị gián đoạn để lại các tệp quan trọng không đầy đủ.
Tiến trình PHP-FPM crash -- Các tiến trình worker chết do vấn đề bộ nhớ hoặc đạt giới hạn pm.max_children khiến Nginx trả về lỗi 500.
Cấu hình máy chủ sai -- Phiên bản PHP sai, cài đặt virtual host không hợp lệ hoặc server block Nginx lỗi đều kích hoạt lỗi 500.
Ổ đĩa đầy -- Khi máy chủ hết dung lượng ổ đĩa, nó không thể ghi nhật ký hoặc tệp tạm, gây ra crash.
Lỗi script CGI/Perl -- Chế độ tệp sai (nhị phân thay vì ASCII), kết thúc dòng không đúng hoặc thiếu module.
Cách khắc phục lỗi 500 (Dành cho người truy cập)
Nếu bạn thấy lỗi 500 trên trang web của người khác, vấn đề nằm ở phía máy chủ -- không phải của bạn. Tuy nhiên, có một vài điều bạn có thể thử trước khi bỏ cuộc.
Tải lại trang -- Đợi 30 giây, sau đó nhấn F5 hoặc Ctrl+R (Cmd+R trên Mac). Nhiều lỗi 500 do máy chủ bị trục trặc nhất thời và tự khắc phục.
Tải lại cứng -- Nhấn Ctrl+Shift+R (Cmd+Shift+R trên Mac) để bỏ qua bộ nhớ đệm trình duyệt và tải bản sao hoàn toàn mới.
Xóa bộ nhớ đệm và cookie trình duyệt -- Vào cài đặt trình duyệt và xóa các tệp đã lưu cache. Dữ liệu cache bị hỏng đôi khi có thể gây ra vấn đề hiển thị.
Thử chế độ ẩn danh -- Mở cửa sổ riêng tư/ẩn danh để loại trừ các tiện ích mở rộng trình duyệt hoặc trạng thái cache gây vấn đề.
Kiểm tra trang web có bị sập cho tất cả mọi người không -- Sử dụng công cụ HTTP Headers Checker của DNS Robot để xác minh mã trạng thái phản hồi của máy chủ.
Thử lại sau -- Vì vấn đề nằm ở phía máy chủ, chủ website cần khắc phục. Đợi 15-30 phút và kiểm tra lại.
Liên hệ chủ website -- Nếu lỗi kéo dài hàng giờ, hãy thông báo cho họ qua trang liên hệ hoặc mạng xã hội.
Cách 1: Kiểm tra nhật ký lỗi máy chủ
Nhật ký lỗi là công cụ debug quan trọng nhất cho lỗi 500. Chúng cho bạn biết chính xác điều gì đã xảy ra sai, bao gồm đường dẫn tệp, số dòng và thông báo lỗi. Luôn kiểm tra nhật ký trước khi thử bất kỳ điều gì khác.
# Apache error log
tail -100 /var/log/apache2/error.log
# Nginx error log
tail -100 /var/log/nginx/error.log
# PHP-FPM error log
tail -100 /var/log/php-fpm/error.log
# WordPress debug log (if WP_DEBUG_LOG enabled)
tail -100 /path/to/wordpress/wp-content/debug.logCách 2: Kiểm tra và sửa .htaccess
Tệp .htaccess bị hỏng hoặc cấu hình sai là nguyên nhân phổ biến nhất gây lỗi 500 trên máy chủ Apache. Một lỗi đánh máy, chỉ thị không được hỗ trợ hoặc RewriteRule sai có thể làm sập toàn bộ trang web.
Cách kiểm tra nhanh nhất là tạm thời đổi tên tệp. Nếu trang web tải được sau khi đổi tên, .htaccess chính là vấn đề.
# Rename to disable .htaccess
mv .htaccess .htaccess_backup
# If site loads, regenerate a clean .htaccess
# For WordPress, go to Settings > Permalinks and click SaveCách 3: Sửa quyền truy cập tệp
Quyền truy cập tệp sai ngăn web server đọc hoặc thực thi tệp. Quyền chuẩn là 644 cho tệp và 755 cho thư mục. Không bao giờ đặt quyền 777 -- đó là rủi ro bảo mật và nhiều nhà cung cấp hosting chặn nó.
# Set correct directory permissions
find /path/to/webroot -type d -exec chmod 755 {} \;
# Set correct file permissions
find /path/to/webroot -type f -exec chmod 644 {} \;
# WordPress wp-config.php (extra security)
chmod 440 wp-config.phpCách 4: Tăng giới hạn bộ nhớ và thời gian thực thi PHP
Script PHP vượt giới hạn bộ nhớ hoặc thời gian thực thi tối đa sẽ bị máy chủ dừng mà không có cảnh báo, dẫn đến lỗi 500. Giới hạn memory_limit mặc định 128M và max_execution_time 30 giây thường quá thấp cho các ứng dụng phức tạp.
Bạn có thể tăng các giới hạn này bằng nhiều cách tùy theo cấu hình máy chủ.
# Option 1: php.ini (best method)
memory_limit = 256M
max_execution_time = 300
# Option 2: .htaccess (Apache only)
php_value memory_limit 256M
php_value max_execution_time 300
# Option 3: .user.ini (FastCGI/Nginx)
memory_limit = 256M
# Option 4: wp-config.php (WordPress)
define( 'WP_MEMORY_LIMIT', '256M' );Cách 5: Tắt plugin và theme (CMS)
Nếu bạn đang chạy WordPress, Joomla hoặc CMS khác, plugin hoặc theme bị lỗi là một trong những nguyên nhân phổ biến nhất gây lỗi 500. Cách kiểm tra nhanh nhất là tắt tất cả plugin cùng lúc, sau đó bật lại từng cái một.
# Disable all WordPress plugins (via file system)
cd /path/to/wordpress/wp-content
mv plugins plugins_disabled
# Or use WP-CLI
wp plugin deactivate --all
# Switch to default theme
wp theme activate twentytwentyfourCách 6: Kiểm tra kết nối và sửa chữa cơ sở dữ liệu
Lỗi 500 có thể xảy ra khi ứng dụng không thể kết nối đến cơ sở dữ liệu. Điều này xảy ra khi thông tin đăng nhập sai, máy chủ cơ sở dữ liệu bị sập hoặc các bảng bị hỏng.
Trước tiên hãy xác minh thông tin đăng nhập cơ sở dữ liệu trong tệp cấu hình (wp-config.php cho WordPress, .env cho Laravel). Sau đó kiểm tra kết nối và sửa chữa các bảng bị hỏng nếu cần.
# Test MySQL connection
mysql -u username -p -h localhost database_name -e "SELECT 1;"
# Repair and optimize all tables
mysqlcheck -u username -p --auto-repair --optimize database_name
# WordPress: add to wp-config.php, then visit /wp-admin/maint/repair.php
define( 'WP_ALLOW_REPAIR', true );Cách 7: Kiểm tra tính tương thích phiên bản PHP
Chạy mã viết cho phiên bản PHP cũ trên phiên bản PHP mới (hoặc ngược lại) sẽ kích hoạt lỗi nghiêm trọng. Các hàm bị loại bỏ, hành vi mặc định thay đổi và tính năng bị gỡ bỏ là những thủ phạm phổ biến sau khi nâng cấp PHP.
Kiểm tra phiên bản PHP hiện tại và so sánh với yêu cầu của ứng dụng.
# Check PHP version
php -v
# List loaded PHP modules
php -m
# Check current memory limit
php -i | grep memory_limitCách 8: Kiểm tra dung lượng ổ đĩa
Khi máy chủ hết dung lượng ổ đĩa, nó không thể ghi tệp nhật ký, tệp tạm hoặc dữ liệu phiên -- điều này gây lỗi 500. Đây thường bị bỏ qua nhưng lại khá phổ biến, đặc biệt khi tệp nhật ký tăng không kiểm soát.
# Check disk usage
df -h
# Find large files eating disk space
du -sh /var/log
du -sh /tmp
# Clear old log files if needed
truncate -s 0 /var/log/nginx/error.logSo sánh 500 với 502, 503 và 504: Sự khác biệt là gì?
Điểm khác biệt chính: 500 = máy chủ bị hỏng nội bộ. 502 = proxy nhận dữ liệu rác từ backend. 503 = máy chủ vẫn hoạt động nhưng đang bận. 504 = proxy bỏ cuộc chờ đợi. Bạn có thể kiểm tra chính xác mã trạng thái máy chủ trả về bằng HTTP Headers Checker của DNS Robot.
| Mã lỗi | Tên | Ý nghĩa | Nguyên nhân phổ biến |
|---|---|---|---|
| 500 | Internal Server Error | Bản thân máy chủ bị crash hoặc ném ra exception không xử lý | Lỗi PHP nghiêm trọng, .htaccess hỏng, hết bộ nhớ |
| 502 | Bad Gateway | Proxy nhận phản hồi không hợp lệ từ backend | PHP-FPM crash, backend không chạy, socket bị đóng |
| 503 | Service Unavailable | Máy chủ tạm thời bị quá tải hoặc đang bảo trì | Đột biến lưu lượng, bảo trì có kế hoạch, giới hạn tài nguyên |
| 504 | Gateway Timeout | Proxy hết thời gian chờ đợi backend phản hồi | Truy vấn cơ sở dữ liệu chậm, script chạy lâu, upstream không phản hồi |
Lỗi 500 ảnh hưởng đến SEO như thế nào
Lỗi 500 có tác động SEO nghiêm trọng hơn hầu hết các lỗi HTTP khác. Dưới đây là những điều bạn cần biết.
Xóa chỉ mục có thể bắt đầu trong 2 ngày. John Mueller của Google đã xác nhận rằng lỗi 500 kéo dài có thể khiến URL bị xóa khỏi chỉ mục chỉ trong hai ngày. Điều này nhanh hơn lỗi 503, vốn được Google coi là tạm thời.
Lỗi 500 lãng phí ngân sách thu thập. Khác với lỗi 404 (Google cuối cùng sẽ ngừng thu thập lại), lỗi 500 là mơ hồ -- trang có thể quay lại -- nên Googlebot tiếp tục thử lại mạnh mẽ. Điều này lãng phí ngân sách thu thập cho các trang không trả về gì.
Thứ hạng giảm nhanh nhưng phục hồi được. Khi bạn khắc phục vấn đề, Google thường khôi phục thu thập trong vài ngày. Tuy nhiên, phục hồi thứ hạng có thể mất vài tuần -- thứ hạng không quay lại ngay lập tức.
Sử dụng 503 cho bảo trì có kế hoạch, không bao giờ dùng 500. Phản hồi 503 được cấu hình đúng với header Retry-After sẽ báo Google quay lại sau mà không xóa trang. Lỗi 500 không gửi tín hiệu nào như vậy.
Cách phòng ngừa lỗi 500
Phòng bệnh hơn chữa bệnh. Hãy làm theo các phương pháp tốt nhất dưới đây để giảm thiểu rủi ro lỗi 500 trên website của bạn.
Thiết lập giám sát uptime -- Sử dụng các công cụ như UptimeRobot hoặc Pingdom để kiểm tra trang web mỗi 1-5 phút. Nhận cảnh báo ngay khi lỗi 500 xảy ra.
Luôn kiểm tra thay đổi trên staging -- Không bao giờ triển khai trực tiếp lên production. Kiểm tra cập nhật plugin, nâng cấp PHP và thay đổi cấu hình trên môi trường staging trước.
Sử dụng kiểm soát phiên bản (Git) -- Commit mọi thay đổi để bạn có thể hoàn tác triển khai lỗi ngay lập tức chỉ với một lệnh.
Xử lý lỗi đúng cách -- Bọc các truy vấn cơ sở dữ liệu và lời gọi API trong khối try-catch. Ghi lại đầy đủ stack trace phía máy chủ cho mọi lỗi.
Giám sát dung lượng ổ đĩa và tài nguyên máy chủ -- Thiết lập cảnh báo khi dung lượng ổ đĩa vượt 80%, CPU cao và áp lực bộ nhớ.
Cập nhật phần mềm thường xuyên -- Phiên bản CMS, plugin và phần mềm máy chủ lỗi thời chứa các bug đã biết gây crash.
Duy trì sao lưu tự động -- Kiểm tra quy trình khôi phục thường xuyên. Bản sao lưu chưa bao giờ kiểm tra thì không phải là bản sao lưu.
Đặt giới hạn PHP phù hợp -- Cấu hình memory_limit và max_execution_time dựa trên khối lượng công việc thực tế, không phải giá trị mặc định.
Sử dụng CI/CD pipeline -- Tự động hóa kiểm tra trước khi triển khai. Nếu kiểm tra lỗi, triển khai sẽ không được thực hiện.
Kiểm tra phản hồi máy chủ của bạn
Sử dụng HTTP Headers Checker của DNS Robot để xác minh mã trạng thái máy chủ trả về và kiểm tra tất cả header phản hồi.
Try HTTP Headers CheckerFrequently Asked Questions
Lỗi HTTP 500 (Internal Server Error) có nghĩa là web server gặp một tình trạng bất ngờ khiến nó không thể hoàn thành yêu cầu của bạn. Đây là lỗi chung báo hiệu có gì đó đã crash phía máy chủ, nhưng máy chủ không thể xác định chính xác nguyên nhân.