500 Internal Server Error là thông báo bao trùm. Máy chủ đã chạy ứng dụng của bạn, ứng dụng thất bại, và thay vì để lộ chi tiết cho người lạ, máy chủ trả về một trang chung chung. Điều đó là cố ý — thông báo lỗi là rủi ro bảo mật — nhưng hệ quả là trang bạn đang nhìn hoàn toàn không chứa thông tin hữu ích nào.
Thông tin ấy vẫn tồn tại. Gần như mọi lỗi 500 đều ghi một lý do cụ thể vào error log, thường kèm đúng tên file và số dòng. Bài này điểm qua các nguyên nhân theo thứ tự phổ biến, chỉ ra vị trí file log trên từng loại hosting, và đưa ra thứ tự kiểm tra tránh được cái bẫy quen thuộc là sửa năm thứ cùng lúc.
500 thực sự nghĩa là gì
Nhóm 5xx nghĩa là lỗi thuộc phía máy chủ chứ không phải yêu cầu của bạn. Trong nhóm đó, 500 cụ thể nghĩa là ứng dụng đã được gọi tới và chạy, rồi có gì đó bên trong hỏng — một exception không được bắt, một fatal error, một lỗi cú pháp, hoặc chạm giới hạn tài nguyên giữa chừng.
Điều này thực sự khác với những mã lân cận. 502 nghĩa là ứng dụng chưa bao giờ đưa ra câu trả lời dùng được. 503 nghĩa là máy chủ chọn không phục vụ. 504 nghĩa là câu trả lời tới quá muộn. 500 nghĩa là code đã chạy rồi hỏng.
Cùng một lỗi dưới nhiều tên gọi
Một lỗi 500 hiện ra với câu chữ khác nhau tùy phần mềm, khiến người ta tưởng đang gặp những vấn đề khác nhau. Thực ra là một.
- "500 Internal Server Error" — văn bản trạng thái HTTP tiêu chuẩn
- "HTTP Error 500" — thường thấy ở IIS và một số trình duyệt
- "Internal Server Error" — trang mặc định của Apache
- "The server encountered an internal error or misconfiguration" — biến thể dài hơn của Apache
- "Đã có lỗi nghiêm trọng trên trang web này" — thứ WordPress hiển thị sau khi trình xử lý lỗi của nó bắt được sự cố
- "Error 500" trong phản hồi API — vẫn là điều đó, chỉ trả về dạng JSON thay vì HTML
Nguyên nhân thường gặp, phổ biến nhất trước
Thứ tự ở đây quan trọng. Đi lần lượt theo danh sách này sẽ tìm ra nguyên nhân nhanh hơn là chọn cái nghe có vẻ thú vị nhất.
| Nguyên nhân | Mức phổ biến | Dấu hiệu nhận biết |
|---|---|---|
| Fatal error PHP trong code, plugin hoặc theme | Rất thường gặp | Xuất hiện ngay sau một bản cập nhật hoặc thay đổi code |
| Quy tắc .htaccess hỏng | Rất thường gặp | Mọi URL hỏng cùng lúc, kể cả file tĩnh |
| Hết giới hạn bộ nhớ PHP | Thường gặp | Chỉ trang nặng bị hỏng; log ghi "Allowed memory size exhausted" |
| Sai quyền file | Thường gặp | Xuất hiện sau khi chuyển nhà, phục hồi, hoặc tải lên bằng root |
| Phiên bản PHP hỏng hoặc không tương thích | Thỉnh thoảng | Xảy ra sau khi đổi phiên bản PHP trên hosting |
| Database không kết nối được hoặc đầy giới hạn | Thỉnh thoảng | Lúc có lúc không, tệ hơn vào giờ cao điểm |
| Ổ đĩa đầy | Thỉnh thoảng | Mọi thứ hỏng cùng lúc, kể cả việc ghi và ghi log |
Thứ tự kiểm tra nhanh nhất
- Đọc error log trước tiên. Mọi bước bên dưới chỉ là phỏng đoán cho đến khi bạn làm việc này, và log thường nêu thẳng tên file cùng số dòng.
- Hỏi xem có gì vừa thay đổi. Một lỗi 500 xuất hiện ngay sau khi cập nhật plugin, triển khai code hoặc đổi phiên bản PHP đã tự nói cho bạn biết nên tìm ở đâu.
- Đổi tên .htaccess thành .htaccess.bak rồi tải lại. Nếu website trở lại, một quy tắc trong file đó là thủ phạm. Với WordPress, bạn có thể tạo lại file sạch bằng cách lưu lại cài đặt permalink.
- Tạm nâng giới hạn bộ nhớ PHP lên 256M rồi xem lỗi có biến mất không. Nếu có, cách sửa thật thường nằm ở đoạn code ngốn bấy nhiêu bộ nhớ, chứ không phải ở giới hạn được nâng vĩnh viễn.
- Với WordPress, bật WP_DEBUG và WP_DEBUG_LOG trong wp-config.php. Màn hình trắng sẽ biến thành một thông báo có nêu tên plugin.
- Tắt toàn bộ plugin, xác nhận website chạy lại, rồi bật từng cái một. Mất công, nhưng cho kết quả chắc chắn và vẫn nhanh hơn đoán mò.
- Kiểm tra quyền: 644 cho file, 755 cho thư mục. Không bao giờ dùng 777.
- Kiểm tra dung lượng ổ đĩa còn trống. Ổ đầy tạo ra những sự cố giống hệt mọi nguyên nhân khác và làm mất hàng giờ vì không ai nghĩ tới việc kiểm tra.
Error log nằm ở đâu
Đây là bước hay bị bỏ qua, và cũng chính là bước thực sự giải quyết vấn đề. Vị trí tùy thuộc hosting của bạn.
| Môi trường | Vị trí log |
|---|---|
| DirectAdmin | File Manager, rồi thư mục logs của tên miền, hoặc mục "Site Errors" |
| cPanel | Metrics, rồi Errors — hoặc public_html/error_log |
| Nginx trên VPS | /var/log/nginx/error.log |
| Apache trên VPS | /var/log/apache2/error.log hoặc /var/log/httpd/error_log |
| PHP-FPM | /var/log/php-fpm/www-error.log, hoặc đường dẫn đặt trong cấu hình pool |
| WordPress bật debug log | wp-content/debug.log |
Shared hosting và VPS khác nhau ở đâu
Cùng một lỗi 500 trở thành công việc khác nhau tùy nơi website đang chạy, và nên thực tế về điều đó.
Trên shared hosting bạn mở được error log qua control panel, đổi được quyền file, sửa được .htaccess và chỉnh được một số cài đặt PHP. Thứ bạn không làm được là khởi động lại PHP-FPM, đọc log hệ thống, cài extension hay đổi giới hạn cấp máy chủ. Nếu nguyên nhân rơi vào nhóm đó, lựa chọn duy nhất là mở ticket hỗ trợ.
Trên VPS bạn có đủ: log đầy đủ, quyền điều khiển dịch vụ, cấu hình và khả năng tái hiện sự cố dưới tải. Đổi lại, bạn cũng chịu trách nhiệm giữ nó được vá lỗi và cấu hình đúng. Với một website đang tạo ra doanh thu và không thể nằm chờ hàng đợi ticket, đánh đổi đó thường xứng đáng — khác biệt giữa chẩn đoán lỗi 500 trong mười phút và chờ qua đêm.
Muốn tự đọc log thay vì chờ ticket hỗ trợ?
Cloud VPS với quyền root đầy đủ, error log trọn vẹn và không bị giới hạn shared hosting — từ ฿150/tháng.
Câu hỏi thường gặp
Vì sao trang trắng trơn thay vì hiện thông báo lỗi?
Vì display_errors đang tắt, và đó là cài đặt đúng cho website đang chạy thật — chi tiết lỗi có thể để lộ đường dẫn file và thông tin đăng nhập. Thông báo vẫn nằm trong error log. Bật WP_DEBUG_LOG, hoặc đọc trực tiếp error log của máy chủ, chi tiết đều ở đó.
Hỏng ngay sau khi tôi cập nhật một plugin. Giờ làm gì?
Hạ plugin đó xuống. Nếu khu vực quản trị cũng hỏng, hãy đổi tên thư mục plugin đó trong wp-content/plugins qua FTP hoặc File Manager — WordPress vô hiệu hóa thứ nó không tìm thấy và website sẽ trở lại. Sau đó cập nhật lại trên bản staging để xem thật sự cái gì hỏng.
Lỗi 500 có hại cho SEO không?
Ngắn thì không — Google thử lại. Kéo dài nhiều ngày thì có: tốc độ thu thập giảm và trang có thể rơi khỏi chỉ mục. Google ban đầu coi 500 là tạm thời, nên rủi ro tỉ lệ với thời gian kéo dài chứ không phải với việc nó đã xảy ra.
Nâng giới hạn bộ nhớ PHP có phải cách sửa lâu dài không?
Có thể, nếu website thực sự cần nhiều bộ nhớ hơn mức đang có. Thường thì nó chỉ đẩy trần lên trong khi vấn đề thật — một truy vấn kém hiệu quả, một plugin nạp mọi thứ vào bộ nhớ — vẫn tiếp tục lớn dần. Hãy nâng để website chạy lại, rồi tìm xem cái gì đã ngốn hết.
Làm sao phân biệt 500 và 502 khi cả hai đều hiện trang lỗi trống?
Hãy xem mã trạng thái thay vì câu chữ, bằng tab Network trong trình duyệt hoặc chạy "curl -I" tới URL đó. Mười giây ấy rất đáng: 500 dẫn bạn tới code ứng dụng, 502 dẫn tới tiến trình backend. Hai cuộc điều tra khác nhau.
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ếp404 Not Found — Nguyên nhân, ảnh hưởng SEO và khi nào là đúng
Website nào cũng có 404 và phần lớn không sao cả. Chỉ một nhóm nhỏ mới đáng quan tâm: những trang từng tồn tại và vẫn còn người trỏ link tới, cùng biến thể âm thầm trả về mã 200 trong khi hiển thị "không tìm thấy".
Đọc tiếpERR_CONNECTION_TIMED_OUT — Nguyên nhân và cách khắc phục
Trang quay mãi rồi Chrome bỏ cuộc với ERR_CONNECTION_TIMED_OUT. Bài này chỉ cách xác định trong hai phút vấn đề nằm ở phía bạn hay phía máy chủ, rồi các bước sửa tương ứng cho từng phía.
Đọc tiếp