Cách khắc phục lỗi IIS HTTP 503: The Service is Unavailable

beginner🪟 Windows2026-06-07| Windows Server 2016/2019/2022, IIS 8.5, IIS 10.0, ASP.NET Core / Framework

Error Message

HTTP Error 503. The service is unavailable
#iis#application-pool#khắc-phục-sự-cố#windows-server

Vấn đề

Bạn truy cập URL, mong chờ trang chủ hiện ra nhưng lại nhận được thông báo Service Unavailable lạnh lùng. Trong IIS, điều này hầu như luôn có nghĩa là Application Pool của bạn đã bị treo hoặc dừng lại. Bạn có thể khởi động nó bằng tay, nhưng nó lại dừng ngay lập tức khi bạn tải lại trang.

Phân tích: Tại sao lỗi 503 xảy ra

Mã trạng thái 503 là lỗi 'dịch vụ' thay vì lỗi 'trang'. Trong môi trường IIS, driver HTTP.sys nhận yêu cầu của bạn nhưng không tìm thấy tiến trình worker (w3wp.exe) nào đang hoạt động để xử lý. Điều này xảy ra vì một vài lý do cụ thể sau:

  • Thông tin đăng nhập hết hạn: Trong các thiết lập doanh nghiệp, mật khẩu tài khoản dịch vụ thay đổi sau mỗi 30-90 ngày. Nếu App Pool identity không được cập nhật, nó sẽ không thể đăng nhập.
  • Rapid-Fail Protection: Theo mặc định, nếu một ứng dụng bị treo 5 lần trong vòng 5 phút, IIS sẽ tắt pool để tiết kiệm tài nguyên CPU.
  • Thiếu Runtime: Mã nguồn của bạn có thể cần ASP.NET Core Hosting Bundle, nhưng máy mới chỉ cài đặt .NET Runtime.
  • Quyền truy cập thư mục: Tài khoản dịch vụ thiếu quyền 'Read' (Đọc) đối với đường dẫn vật lý của trang web.

Bước 1: Thiết lập lại Identity

Các vấn đề về thông tin đăng nhập gây ra khoảng 70% lỗi 503. Nếu bạn sử dụng tài khoản domain hoặc một người dùng cục bộ cụ thể, việc thay đổi mật khẩu gần đây sẽ làm trang web bị hỏng ngay lập tức.

  • Mở IIS Manager.
  • Chọn Application Pools từ thanh điều hướng bên trái.
  • Chuột phải vào pool cụ thể của bạn và chọn Advanced Settings.
  • Tìm dòng Identity trong phần Process Model.
  • Nếu sử dụng tài khoản tùy chỉnh, nhấp vào Set... và cung cấp mật khẩu đã cập nhật.
  • Khởi động lại pool và tải lại trang web.

Bước 2: Kiểm tra Event Viewer

Đừng đoán mò nữa mà hãy xem nhật ký (logs). Windows ghi lại chính xác lý do tại sao một tiến trình không khởi động được. Cách này nhanh hơn nhiều so với việc thử và sai.

  • Nhấn Win + R, gõ eventvwr.msc, và nhấn Enter.
  • Mở rộng Windows Logs và chọn System.
  • Lọc theo Source (Nguồn): WAS (Windows Process Activation Service).
  • Tìm Event ID 5021 (identity không hợp lệ) hoặc 5059 (lỗi App Pool).
# Nhật ký lỗi điển hình:
Application pool 'ProductionPool' đã bị vô hiệu hóa. 
Windows Process Activation Service (WAS) đã gặp sự cố.

Bước 3: Ngắt chu kỳ Rapid-Fail

IIS bảo vệ máy chủ của bạn khỏi 'vòng lặp treo'. Nếu ứng dụng của bạn bị treo ngay khi khởi động, IIS sẽ ngừng thử sau một vài lần. Để xem lỗi mã nguồn thực sự, bạn phải tạm thời tắt tính năng an toàn này.

  • Mở Advanced Settings cho Application Pool của bạn.
  • Cuộn xuống phần Rapid-Fail Protection.
  • Thay đổi Enabled thành False.
  • Recycle (Tái chế) lại pool. Bây giờ, trang web sẽ giữ trạng thái 'Started', cho phép bạn thấy lỗi chi tiết 500.xx để xác định đoạn mã bị lỗi hoặc DLL bị thiếu.

Bước 4: Sửa quyền thư mục

Application Pool của bạn không chỉ cần đăng nhập hợp lệ; nó còn cần quyền 'Read & Execute' (Đọc & Thực thi) đối với thư mục web. Ngay cả ApplicationPoolIdentity cũng cần quyền truy cập cụ thể vào các tệp tin của bạn.

# Cấp quyền cho App Pool cụ thể thông qua PowerShell
icacls "C:\inetpub\wwwroot\my-app" /grant "IIS AppPool\MyPoolName:(OI)(CI)(RX)"

Bước 5: Xác định ứng dụng chiếm dụng cổng

Một ứng dụng khác có thể đang sử dụng Cổng 80 hoặc 443. Mặc dù hiếm gặp đối với lỗi 503, nhưng nó vẫn xảy ra nếu một proxy như Nginx hoặc Apache đang chạy trên cùng một máy và tranh chấp lưu lượng với IIS.

# Kiểm tra các tiến trình đang lắng nghe trên cổng 80
netstat -ano | findstr :80
# Sử dụng PID từ cột cuối cùng để tìm tên ứng dụng
tasklist /fi "pid eq [YOUR_PID]"

Xác minh

Xác nhận việc khắc phục bằng cách kiểm tra HTTP headers. Sử dụng công cụ dòng lệnh để tránh các vấn đề về bộ nhớ đệm (cache) của trình duyệt.

  • Khởi động App Pool bằng tay.
  • Chạy: curl -I http://localhost/.
  • Nếu sửa thành công, kết quả trả về sẽ là HTTP/1.1 200 OK.
  • Đợi 5 phút. Nếu pool vẫn đang chạy, các vấn đề về Rapid-Fail của bạn đã được giải quyết.

Related Error Notes