Server

500 Internal Server Error — Nguyên nhân và cách sửa

Cập nhật 2026-08-30Đọc ~9 phút

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.

💡 Hệ quả hữu ích nhất: vì ứng dụng thực sự đã chạy, gần như chắc chắn nó có ghi lại điều gì đó. Tìm được dòng log ấy biến một lỗi 500 mơ hồ thành một bug cụ thể có thể sửa.

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ânMức phổ biếnDấu hiệu nhận biết
Fatal error PHP trong code, plugin hoặc themeRất thường gặpXuất hiện ngay sau một bản cập nhật hoặc thay đổi code
Quy tắc .htaccess hỏngRất thường gặpMọi URL hỏng cùng lúc, kể cả file tĩnh
Hết giới hạn bộ nhớ PHPThường gặpChỉ trang nặng bị hỏng; log ghi "Allowed memory size exhausted"
Sai quyền fileThường gặpXuấ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íchThỉnh thoảngXả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ạnThỉnh thoảngLúc có lúc không, tệ hơn vào giờ cao điểm
Ổ đĩa đầyThỉnh thoảngMọ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.
💡 Mỗi lần chỉ đổi một thứ rồi tải lại. Nếu bạn đổi vài thứ cùng lúc rồi website chạy, bạn sẽ không bao giờ biết cái nào có tác dụng — và một trong những thay đổi kia có thể đã tạo ra lỗ hổng bảo mật.

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ườngVị trí log
DirectAdminFile Manager, rồi thư mục logs của tên miền, hoặc mục "Site Errors"
cPanelMetrics, 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 logwp-content/debug.log
💡 Đọc log từ dưới lên, không phải từ trên xuống. Bản ghi mới nhất nằm ở cuối, và dòng bạn cần là dòng có dấu thời gian đúng lúc bạn kích hoạt lỗi.

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.