IIS: một site trên Windows
Cách cài đặt máy chủ web IIS trên VPS, xuất bản site đầu tiên trên tên miền của bạn, phát hành chứng chỉ, và tránh chìm trong log.
Cập nhật 23 tháng 8, 2026
IIS là web server tích hợp sẵn của Windows Server. Nó hoạt động tốt cho các ứng dụng ASP.NET, cho nội dung tĩnh và làm reverse proxy đứng trước một dịch vụ đang lắng nghe trên cổng nội bộ.
Cài đặt
Install-WindowsFeature -Name Web-Server -IncludeManagementTools
Install-WindowsFeature Web-Asp-Net48, Web-Http-Redirect, Web-Dyn-Compression
Mở các cổng trong tường lửa:
New-NetFirewallRule -DisplayName "HTTP" -Direction Inbound -Protocol TCP -LocalPort 80 -Action Allow
New-NetFirewallRule -DisplayName "HTTPS" -Direction Inbound -Protocol TCP -LocalPort 443 -Action Allow
Kiểm tra rằng trang khởi đầu mở được tại địa chỉ máy của bạn từ mục “Tổng quan” trong bảng điều khiển /hosting/vds/m/<id>. Nếu không, xem Windows Firewall.
Site đầu tiên của bạn
Import-Module WebAdministration
New-Item -ItemType Directory C:\sites\example
Set-Content C:\sites\example\index.html "<h1>It works</h1>"
New-WebAppPool -Name "example"
New-Website -Name "example" -Port 80 -HostHeader "example.ru" `
-PhysicalPath "C:\sites\example" -ApplicationPool "example"
Host header (-HostHeader) cho phép bạn host nhiều site trên một địa chỉ: IIS phân biệt chúng bằng tên miền. Tên miền phải trỏ đến địa chỉ máy của bạn bằng bản ghi A.
Site chỉ cần quyền tối thiểu trên thư mục — quyền đọc:
icacls C:\sites\example /grant "IIS AppPool\example:(OI)(CI)R" /T
Chứng chỉ HTTPS
Cách dễ nhất để có chứng chỉ miễn phí là dùng client win-acme: tải wacs.exe, chạy nó với quyền quản trị viên và chọn site của bạn từ danh sách — nó sẽ cấp chứng chỉ, gán chứng chỉ vào site và tạo tác vụ gia hạn.
Để kiểm tra các binding:
Get-WebBinding -Name "example"
New-WebBinding -Name "example" -Protocol https -Port 443 -HostHeader "example.ru" -SslFlags 1
Để cấp chứng chỉ, cổng 80 phải mở từ bên ngoài — quá trình xác thực tên miền diễn ra qua cổng này.
Một ứng dụng đứng sau IIS
Nếu dịch vụ của bạn (Node, Python, .NET Kestrel) lắng nghe trên 127.0.0.1:5000, hãy cài các module URL Rewrite và Application Request Routing, bật proxying và thêm đoạn sau vào web.config của site:
<rule name="proxy" stopProcessing="true">
<match url="(.*)" />
<action type="Rewrite" url="http://127.0.0.1:5000/{R:1}" />
</rule>
Như vậy chỉ IIS với chứng chỉ được mở ra bên ngoài, còn ứng dụng vẫn nằm trên localhost.
Vận hành
Get-Website | Select-Object Name, State, PhysicalPath
Restart-WebAppPool example
Get-WebAppPoolState
Log nằm trong C:\inetpub\logs\LogFiles và tăng lên không giới hạn — trên đĩa 40 GB, dung lượng này tích tụ rất nhanh. Hãy thiết lập rotation trong IIS Manager (mục “Logging”, file theo ngày) và xóa log cũ bằng tác vụ theo lịch:
Get-ChildItem C:\inetpub\logs\LogFiles -Recurse -File |
Where-Object LastWriteTime -lt (Get-Date).AddDays(-30) | Remove-Item -Force
Các lỗi thường gặp
- Lỗi 500.19 —
web.configbị hỏng hoặc thiếu module. Nguyên nhân chính xác hiển thị trong nội dung lỗi nếu bạn bật thông báo chi tiết cho các yêu cầu cục bộ. - Application pool tự dừng. Cơ chế rapid-fail protection đã kích hoạt: site bị crash và IIS tắt nó. Hãy tìm nguyên nhân trong application log (
Get-WinEvent -LogName Application -MaxEvents 30). - Site mở được bằng địa chỉ nhưng không mở được bằng tên miền. Host header không khớp, hoặc DNS chưa cập nhật.
- Lỗi 403 sau khi publish. Application pool chưa được cấp quyền trên thư mục.
Hãy để các thư mục site của bạn ngoài
C:\inetpubvà trong một thư mục riêng nhưC:\sites— điều đó giúp sao lưu dễ hơn và cho phép bạn cài lại hệ thống mà không mất dữ liệu.