Hướng Dẫn Cài IIS Trên VPS Windows Server Từ A-Z

Hướng dẫn cài IIS trên VPS Windows Server bằng Server Manager và PowerShell, tạo website, binding domain, mở firewall, kiểm tra port 80/443, log và các lỗi thường gặp.

IIS (Internet Information Services) là web server tích hợp trong Windows Server, phù hợp để chạy website ASP.NET, ứng dụng .NET, static site hoặc làm reverse proxy trong một số kiến trúc. Trên VPS Windows, IIS có thể được cài trực tiếp bằng Server Manager hoặc PowerShell với role `Web-Server`. Tuy nhiên, cài role mới chỉ là bước đầu: bạn còn cần tạo site, cấu hình binding, thư mục web, quyền NTFS, DNS, firewall, HTTPS và log. Bài viết này hướng dẫn toàn bộ quy trình từ một VPS Windows mới đến website chạy được qua domain, đồng thời giải thích khi nào nên dùng IIS thay vì Nginx/Linux, cách xử lý lỗi 403/404/500, cách kiểm tra port bằng PowerShell và các lưu ý bảo mật khi đưa website ra Internet.

Điểm quan trọng Hãy lựa chọn dịch vụ dựa trên nhu cầu sử dụng thực tế và theo dõi tài nguyên thường xuyên để có hiệu quả tốt nhất.

Nếu bạn cần chạy website hoặc ứng dụng .NET trên VPS Windows, IIS là một trong những lựa chọn tự nhiên nhất vì được tích hợp trực tiếp với Windows Server. Microsoft cung cấp role Web Server (IIS) trong Server Manager và cũng hỗ trợ cài bằng PowerShell với Install-WindowsFeature.

Bài viết này hướng dẫn theo hướng thực tế: cài IIS, kiểm tra dịch vụ, tạo website mới, trỏ domain, cấu hình binding, mở firewall, phân quyền thư mục, bật HTTPS và chẩn đoán lỗi.

Nếu bạn chưa biết cách kết nối VPS Windows, nên xem trước bài Hướng dẫn đăng nhập VPS Windows trên máy tính.

1. IIS là gì?

IIS là web server của Microsoft dành cho Windows Server. Nó có thể phục vụ:

  • HTML/CSS/JavaScript tĩnh;
  • ASP.NET Framework;
  • ASP.NET Core khi cài Hosting Bundle phù hợp;
  • API;
  • reverse proxy khi bổ sung module phù hợp;
  • nhiều website trên cùng một VPS thông qua binding.

IIS được quản lý qua:

  • IIS Manager;
  • Server Manager;
  • PowerShell;
  • file cấu hình XML ở cấp hệ thống/site.

2. Khi nào nên dùng IIS?

IIS phù hợp khi:

  • ứng dụng được xây cho Windows/.NET;
  • cần tích hợp Windows Authentication;
  • muốn quản trị bằng giao diện đồ họa;
  • đội vận hành quen Windows Server;
  • ứng dụng phụ thuộc IIS module hoặc ASP.NET Framework.

Nếu website chỉ là PHP/WordPress hoặc stack Linux phổ biến, Ubuntu + Nginx có thể đơn giản và tiết kiệm tài nguyên hơn tùy trường hợp.

Bạn có thể tham khảo bài Cài website trên VPS Ubuntu để so sánh hai hướng triển khai.

3. Chuẩn bị trước khi cài IIS

Bạn cần:

  • VPS Windows Server;
  • quyền Administrator;
  • IP public hoặc network phù hợp;
  • domain nếu muốn chạy website thật;
  • source code hoặc file HTML test;
  • quyền chỉnh DNS domain.

Nếu cần một máy chủ Windows chạy 24/7, có thể tham khảo VPS tại HUONG CLOUD và chọn tài nguyên theo website thực tế.

4. Kiểm tra phiên bản Windows Server

Mở PowerShell:

winver

Hoặc:

Get-ComputerInfo | Select-Object WindowsProductName, WindowsVersion, OsBuildNumber

Biết chính xác phiên bản giúp bạn chọn module IIS và .NET Hosting Bundle phù hợp.

5. Cài IIS bằng Server Manager

Theo tài liệu Microsoft:

  1. Mở Server Manager.
  2. Chọn Manage.
  3. Chọn Add Roles and Features.
  4. Chọn Role-based or feature-based installation.
  5. Chọn server hiện tại.
  6. Tích Web Server (IIS).
  7. Chấp nhận các management tools cần thiết.
  8. Nhấn Install.

Sau khi hoàn tất, IIS service sẽ được cài cùng cấu hình mặc định.

6. Cài IIS bằng PowerShell

Cách nhanh hơn:

Install-WindowsFeature Web-Server -IncludeManagementTools

Kiểm tra role:

Get-WindowsFeature Web-Server

Nếu Install State là Installed, role đã được cài.

Microsoft cũng hỗ trợ cài thêm toàn bộ subfeature bằng:

Install-WindowsFeature -Name Web-Server -IncludeAllSubFeature -IncludeManagementTools

Có nên cài toàn bộ subfeature?

Không nhất thiết.

Trên production, nên cài đúng module ứng dụng cần để giảm bề mặt tấn công và tài nguyên thừa.

7. Kiểm tra IIS hoạt động

Mở trình duyệt trên VPS và truy cập:

http://localhost

Hoặc từ máy cá nhân:

http://IP_VPS

Nếu thấy trang mặc định IIS, web server đang hoạt động.

8. Kiểm tra service IIS

IIS dùng Windows Process Activation Service và World Wide Web Publishing Service.

Kiểm tra:

Get-Service W3SVC

Nếu service dừng:

Start-Service W3SVC

Restart IIS toàn bộ:

iisreset

Có nên dùng iisreset thường xuyên?

Không nên xem đây là nút “sửa mọi lỗi”. iisreset có thể ảnh hưởng tất cả site trên server.

Nếu chỉ một application pool gặp vấn đề, nên recycle đúng pool thay vì restart toàn IIS.

9. Thư mục website mặc định của IIS

Default Web Site thường dùng:

C:\inetpub\wwwroot

Bạn có thể đặt file test:



Test IIS
IIS hoạt động

Lưu thành:

C:\inetpub\wwwroot\index.html

Sau đó refresh trình duyệt.

10. Có nên dùng Default Web Site cho website thật?

Có thể, nhưng với production nên tạo site riêng để quản lý dễ hơn.

Lợi ích:

  • thư mục riêng;
  • application pool riêng;
  • binding riêng;
  • log riêng;
  • quyền NTFS riêng;
  • dễ backup và migrate.

11. Tạo thư mục website riêng

Ví dụ:

C:\Sites\example.com

Tạo bằng PowerShell:

New-Item -ItemType Directory -Path C:\Sites\example.com

Tạo file index.html để test.

12. Mở IIS Manager

Nhấn Start và tìm:

Internet Information Services (IIS) Manager

Ở panel bên trái, bạn sẽ thấy:

  • server;
  • Application Pools;
  • Sites.

13. Tạo website mới trong IIS Manager

  1. Chuột phải Sites.
  2. Chọn Add Website.
  3. Điền:
    • Site name;
    • Physical path;
    • Type: http;
    • IP address;
    • Port;
    • Host name.
  4. Nhấn OK.

Ví dụ:

Site name: example.com
Physical path: C:\Sites\example.com
Port: 80
Host name: example.com

14. Binding trong IIS là gì?

Binding xác định site sẽ nhận request dựa trên:

  • protocol;
  • IP;
  • port;
  • hostname;
  • certificate với HTTPS.

Nhờ hostname binding, nhiều website có thể dùng chung port 80 hoặc 443 trên một VPS.

15. Trỏ domain về VPS

Tại DNS provider, tạo bản ghi A:

Type: A
Name: @
Value: IP_VPS

Cho www:

Type: CNAME
Name: www
Value: example.com

Hoặc A record cùng IP.

Kiểm tra:

Resolve-DnsName example.com

Đảm bảo domain resolve đúng IP trước khi cấu hình SSL.

16. Mở firewall cho HTTP và HTTPS

Windows Firewall có thể chặn traffic inbound.

Tạo rule HTTP:

New-NetFirewallRule -DisplayName "HTTP 80" -Direction Inbound -Protocol TCP -LocalPort 80 -Action Allow

HTTPS:

New-NetFirewallRule -DisplayName "HTTPS 443" -Direction Inbound -Protocol TCP -LocalPort 443 -Action Allow

Không mở port khác nếu ứng dụng không cần.

17. Kiểm tra port 80/443 đang listen

Get-NetTCPConnection -LocalPort 80 -State Listen

Với port 443:

Get-NetTCPConnection -LocalPort 443 -State Listen

Hoặc:

netstat -ano | findstr :80

18. Test kết nối từ máy cá nhân

Trên PowerShell máy local:

Test-NetConnection IP_VPS -Port 80

Nếu:

TcpTestSucceeded : True

port có thể truy cập từ mạng hiện tại.

Nếu false, kiểm tra:

  • IIS;
  • Windows Firewall;
  • firewall của nhà cung cấp;
  • IP;
  • route.

19. Cấu hình quyền NTFS cho thư mục web

IIS process cần quyền đọc file website.

Không nên cấp Everyone: Full Control chỉ để xử lý lỗi 403.

Thông thường, bạn có thể cấp quyền phù hợp cho identity của application pool hoặc nhóm IIS phù hợp.

Ví dụ read/execute cho IIS_IUSRS:

icacls C:\Sites\example.com /grant "IIS_IUSRS:(OI)(CI)RX" /T

Nếu ứng dụng cần ghi vào thư mục uploads, chỉ cấp Modify cho đúng thư mục đó.

20. Application Pool là gì?

Application Pool giúp cô lập ứng dụng trong IIS.

Mỗi pool có thể có:

  • process riêng;
  • identity riêng;
  • recycle policy;
  • .NET CLR config;
  • resource behavior riêng.

Với nhiều website, nên cân nhắc pool riêng để một app lỗi ít ảnh hưởng app khác.

21. Tạo Application Pool riêng

Trong IIS Manager:

  1. Chọn Application Pools.
  2. Add Application Pool.
  3. Đặt tên.
  4. Chọn runtime phù hợp.

Sau đó vào site → Advanced Settings → Application Pool để gán.

22. ASP.NET Core trên IIS cần gì?

Đối với ASP.NET Core, IIS thường hoạt động cùng ASP.NET Core Module được cài qua Hosting Bundle phù hợp.

Không nên chỉ cài IIS rồi giả định app .NET hiện đại sẽ chạy ngay.

Bạn cần:

  • .NET runtime/Hosting Bundle đúng phiên bản;
  • publish app;
  • web.config;
  • application pool phù hợp;
  • quyền thư mục.

Luôn kiểm tra tài liệu .NET cho phiên bản app đang dùng.

23. Cài SSL cho IIS

Bạn có nhiều lựa chọn:

  • chứng chỉ thương mại;
  • Let's Encrypt qua ACME client tương thích Windows/IIS;
  • certificate quản lý bởi hệ thống khác;
  • reverse proxy/CDN terminate SSL.

IIS Manager hỗ trợ import certificate vào Server Certificates rồi bind vào site.

24. Tạo HTTPS binding

Sau khi certificate đã có:

  1. Chọn site.
  2. Chọn Bindings.
  3. Add.
  4. Type: https.
  5. Port: 443.
  6. Host name.
  7. Chọn SSL certificate.

Nếu chạy nhiều HTTPS site cùng IP, SNI thường được sử dụng trong các cấu hình hiện đại.

25. Redirect HTTP sang HTTPS

Có thể dùng HTTP Redirect feature hoặc URL Rewrite module tùy kiến trúc.

Không nên redirect trước khi chắc chắn HTTPS đã hoạt động, nếu không bạn có thể tự tạo vòng lỗi khiến site không truy cập được.

26. Log IIS nằm ở đâu?

Log mặc định thường nằm dưới:

C:\inetpub\logs\LogFiles

Bạn có thể kiểm tra:

  • status code;
  • URL;
  • client IP;
  • user-agent;
  • thời gian request.

Khi website lỗi, IIS log là nguồn dữ liệu quan trọng.

27. Failed Request Tracing là gì?

IIS hỗ trợ Failed Request Tracing để phân tích request lỗi sâu hơn.

Tính năng này hữu ích khi:

  • 500 error khó xác định;
  • module pipeline lỗi;
  • authentication failure;
  • rewrite issue.

Chỉ bật tracing cần thiết và quản lý log để tránh đầy disk.

28. Xử lý lỗi 403 Forbidden

Nguyên nhân phổ biến:

  • không có file default document;
  • quyền NTFS thiếu;
  • Directory Browsing tắt và không có index;
  • authorization rule;
  • handler/module.

Kiểm tra:

  • index.html hoặc default document;
  • Physical Path;
  • NTFS ACL;
  • IIS log.

29. Xử lý lỗi 404 Not Found

Kiểm tra:

  • URL;
  • file có tồn tại không;
  • binding đúng site không;
  • route ứng dụng;
  • handler mapping;
  • rewrite rule.

Nếu nhiều site cùng port 80, hostname binding sai có thể đưa request vào site khác.

30. Xử lý lỗi 500 Internal Server Error

Lỗi 500 thường liên quan ứng dụng hoặc cấu hình server.

Kiểm tra:

  • Event Viewer;
  • IIS log;
  • stdout log của ASP.NET Core nếu được bật đúng cách;
  • application pool;
  • web.config;
  • runtime.

Không nên chỉ recycle pool liên tục mà không đọc log.

31. Xử lý 502.5 hoặc lỗi ASP.NET Core startup

Thường liên quan app process không start được.

Kiểm tra:

  • Hosting Bundle;
  • runtime version;
  • app publish;
  • environment variables;
  • database connection;
  • permission;
  • stdout log.

32. Restart Application Pool thay vì restart server

Trong PowerShell có WebAdministration module ở các môi trường phù hợp.

Ví dụ recycle pool:

Restart-WebAppPool -Name "MyAppPool"

Hoặc dùng IIS Manager.

Cô lập thao tác giúp giảm ảnh hưởng tới site khác.

33. Backup cấu hình IIS

Trước thay đổi lớn, có thể backup cấu hình IIS bằng công cụ AppCmd:

%windir%\system32\inetsrv\appcmd add backup BeforeChange

Liệt kê backup:

%windir%\system32\inetsrv\appcmd list backup

Ngoài config IIS, bạn vẫn cần backup:

  • source;
  • upload;
  • database;
  • certificate/private key khi phù hợp.

34. Có nên đặt website trên ổ C?

Có thể, nhưng nếu VPS có data disk riêng, việc tách dữ liệu ứng dụng sang disk riêng có thể thuận tiện cho backup, resize hoặc quản trị dung lượng.

Không có quy tắc bắt buộc.

Quan trọng là:

  • quyền đúng;
  • backup;
  • disk còn trống;
  • đường dẫn ổn định.

35. Theo dõi CPU/RAM của IIS

Application Pool chạy qua w3wp.exe.

Bạn có thể xem trong Task Manager hoặc Performance Monitor.

Nếu một pool dùng CPU/RAM bất thường:

  • xác định site;
  • kiểm tra request;
  • đọc log;
  • kiểm tra memory leak;
  • tối ưu ứng dụng.

Không nên tăng VPS trước khi biết bottleneck.

36. Có nên bật Directory Browsing?

Không nên bật nếu website không cần liệt kê file.

Directory Browsing có thể làm lộ cấu trúc file nếu cấu hình sai.

Chỉ bật cho use case cụ thể và kiểm soát quyền.

37. Tắt module không cần thiết

Cài càng nhiều role service thì bề mặt tấn công và maintenance càng lớn.

Với production, hãy chỉ giữ:

  • static content;
  • authentication cần dùng;
  • ASP.NET/module cần thiết;
  • management tools phù hợp.

Không nên cài FTP, WebDAV hoặc CGI nếu ứng dụng không dùng.

38. Bảo mật IIS cơ bản

  • cập nhật Windows Server;
  • cập nhật .NET runtime;
  • giữ Windows Firewall;
  • dùng HTTPS;
  • không chạy app pool bằng Administrator;
  • phân quyền NTFS tối thiểu;
  • không expose database public;
  • backup định kỳ;
  • theo dõi log;
  • giới hạn RDP.

39. Tình huống thực tế: đưa website ASP.NET Core lên VPS

Một quy trình hợp lý:

  1. chuẩn bị VPS Windows;
  2. cài IIS;
  3. cài Hosting Bundle đúng .NET version;
  4. publish app;
  5. tạo thư mục site;
  6. tạo application pool;
  7. tạo site + binding;
  8. cấp quyền;
  9. trỏ DNS;
  10. kiểm tra HTTP;
  11. cài SSL;
  12. monitoring và backup.

Không nên cài SSL hoặc DNS trước khi app chạy ổn trên localhost.

40. IIS và Nginx: nên chọn gì?

IIS phù hợp khi

  • ASP.NET Framework;
  • Windows Authentication;
  • hệ sinh thái Windows;
  • quản trị GUI.

Nginx/Linux phù hợp khi

  • stack Linux;
  • PHP/WordPress;
  • reverse proxy nhẹ;
  • muốn footprint hệ điều hành thấp hơn.

Với ASP.NET Core, cả hai mô hình đều có thể phù hợp tùy đội vận hành.

41. Xu hướng Windows web hosting năm 2026

Windows Server 2025 tiếp tục phổ biến

Các workload .NET mới ngày càng dùng Windows Server hiện đại với PowerShell và automation nhiều hơn.

Infrastructure-as-code tăng

Thay vì click thủ công, đội vận hành có thể dùng PowerShell, DSC hoặc pipeline để cài role và deploy app.

HTTPS trở thành mặc định

Website public gần như nên dùng TLS; HTTP thường chỉ phục vụ redirect hoặc challenge.

Monitoring theo application pool

Thay vì chỉ theo dõi tổng CPU VPS, quản trị viên ngày càng quan tâm process/app pool cụ thể.

42. FAQ về IIS trên VPS Windows

IIS có miễn phí không?

IIS là role của Windows Server. Chi phí Windows Server/license phụ thuộc mô hình VPS và nhà cung cấp.

Cài IIS có cần restart VPS không?

Nhiều trường hợp cài role không yêu cầu reboot, nhưng bạn nên theo thông báo Server Manager/PowerShell thực tế.

IIS có chạy PHP được không?

Có thể thông qua FastCGI/PHP cấu hình phù hợp, nhưng nếu workload chủ yếu PHP, Linux + Nginx/Apache có thể đơn giản hơn.

IIS có chạy ASP.NET Core được không?

Có, thường cần ASP.NET Core Hosting Bundle đúng phiên bản.

Có thể chạy nhiều website trên một VPS IIS không?

Có. Dùng nhiều site, binding hostname và application pool riêng.

Tại sao IIS chạy localhost nhưng không truy cập từ ngoài?

Thường cần kiểm tra Windows Firewall, port, IP, binding và firewall lớp nhà cung cấp.

Có nên dùng Default Web Site cho production?

Có thể, nhưng tạo site riêng thường dễ quản lý và cô lập hơn.

Kết luận

Cài IIS trên VPS Windows Server không khó, nhưng để đưa website production lên Internet cần thêm binding, DNS, firewall, quyền NTFS, SSL và monitoring.

Quy trình tốt nhất là đi từng lớp: IIS → site → localhost → binding → DNS → firewall → HTTPS → backup → monitoring.

Nếu bạn cần VPS Windows để chạy ASP.NET, ứng dụng doanh nghiệp hoặc website 24/7, hãy chọn tài nguyên dựa trên lưu lượng thực tế và ưu tiên khả năng backup, nâng CPU/RAM và quản trị Remote Desktop ổn định.

Nguồn tham khảo

Kết luận

Nếu chưa chắc cấu hình hoặc loại dịch vụ nào phù hợp, hãy gửi nhu cầu thực tế để đội ngũ hỗ trợ tư vấn trước khi mua.

Chưa biết nên chọn gói nào?

Xem bảng giá VPS hoặc liên hệ đội ngũ hỗ trợ để chọn cấu hình phù hợp.

Xem bảng giá VPS →