在 Windows Server 2022 上搭建 Web 服务器,最主流、最稳定且无需额外安装第三方软件(如 Apache 或 Nginx)的方案就是使用系统自带的 IIS (Internet Information Services)。
对于国内企业环境,IIS 配合 ASP.NET 或静态站点是极其成熟的选择。以下是基于生产环境标准的搭建流程,去除了废话,直接上干货。
一、 核心准备工作
- 网络配置:确保服务器有公网 IP,或者在局域网内能正常访问。
- 防火墙策略:Windows Server 默认开启防火墙,必须放行 HTTP (80) 和 HTTPS (443) 端口。
- 域名解析:如果你要绑定域名,记得先在 DNS 服务商那里将域名 A 记录指向服务器 IP。
二、 安装 IIS 服务
有两种方式,推荐用图形界面,直观且不易出错;如果你有自动化运维需求,可以用 PowerShell。
方法 A:通过“服务器管理器”安装(推荐新手/常规运维)
- 打开 服务器管理器 (Server Manager) -> 管理 (Manage) -> 添加角色和功能 (Add Roles and Features)。
- 一路点击“下一步”,直到 服务器角色 (Server Roles) 页面。
- 勾选 Web 服务器 (IIS)。
- 注意:此时会弹出提示框询问是否添加依赖功能,点击“添加功能”即可。
- 继续点击“下一步”,在 功能 (Features) 页面,根据需要选择 .NET Framework 版本(如果是跑 .NET Core 或 Node.js,这一步通常不需要勾 .NET Framework,但建议保留 .NET Extensibility 以便后续扩展)。
- 在 Web 服务器角色 (Web Server Role) 的子菜单中,展开 应用程序开发 (Application Development),根据你网站的技术栈勾选:
- ASP.NET 4.8:老项目必备。
- ASP.NET Core 托管捆绑包:必选!这是运行 .NET Core / .NET 5+ 站点的核心依赖。
- CGI:一般不常用,除非有特殊遗留系统。
- 确认摘要信息,点击 安装 (Install)。等待进度条走完,不要中断。
方法 B:通过 PowerShell 安装(适合脚本化部署)
以管理员身份运行 PowerShell,执行以下命令:
Install-WindowsFeature -Name Web-Server, Web-Asp-Net45, Web-Net-Ext45, Web-ISAPI-Ext, Web-ISAPI-Filter, Web-Windows-Auth, Web-Digest-Auth, Web-Mgmt-Console, Web-Security
# 如果需要支持 .NET Core 运行时宿主,需单独安装 .NET Core Hosting Bundle
三、 配置网站与发布内容
安装完成后,IIS 会自动启动一个默认的 Default Web Site,你可以直接使用,也可以新建站点。
- 打开 IIS 管理器 (IIS Manager)。
- 快捷方式:开始菜单搜索 “IIS” 或运行
inetmgr。
- 快捷方式:开始菜单搜索 “IIS” 或运行
- 新建网站:
- 右键点击左侧树状图的 网站 (Sites) -> 添加网站 (Add Website)。
- 站点名称:自定义,如
MyCompanyWeb。 - 物理路径:选择你的代码存放文件夹(例如
D:WebAppsMySite)。 - 绑定 (Bindings):
- 类型:
http - IP 地址:全部未分配(或指定具体 IP)
- 端口:
80 - 主机名:输入你的域名(如
www.example.com),如果不填则所有域名都能访问该站点。
- 类型:
- 设置应用程序池:
- 在右侧操作栏点击 高级设置。
- 标识 (Identity):建议改为
ApplicationPoolIdentity或特定低权限账户,提升安全性。 - .NET CLR 版本:
- 如果是传统 ASP.NET:选择
v4.0。 - 如果是 .NET Core / Node.js / PHP:选择 无托管代码 (No Managed Code)。这一点非常关键,很多人配错导致 500 错误。
- 如果是传统 ASP.NET:选择
四、 常见技术栈的具体适配
IIS 本身只负责 HTTP 请求转发,不同后端语言需要不同的处理模块:
1. 静态站点 (HTML/CSS/JS)
- 配置:无需特殊操作,确保物理路径下有
index.html,IIS 默认就会返回它。 - 优化:可以在 IIS 中启用 HTTP 压缩 和 缓存过期时间,大幅提升加载速度。
2. .NET Core / .NET 5+ 应用
- 前提:必须在服务器上安装 .NET Core Hosting Bundle(微软官网下载)。
- 部署方式:
- 自托管 (Out-of-process):使用 Kestrel 运行,IIS 仅作为反向X_X。这是微软官方推荐的生产环境模式。
- 进程内托管 (In-process):性能更好,但需要修改
web.config中的<aspNetCore processPath="dotnet" arguments=".YourApp.dll" hostingModel="inprocess" />。
- 关键点:确保应用程序池的“启动模式”为
AlwaysRunning,并勾选“预加载已启用”,防止首次访问慢。
3. Node.js 应用
- 工具:推荐使用 iisnode 模块,或者更现代的 nginx-express 方案。
- 简单做法:在 IIS 中创建一个虚拟目录映射到 Node 项目的根目录,并确保
web.config正确配置了 iisnode 处理器。 - 替代方案:很多团队选择在 Windows 上用 Nginx for Windows 做反向X_X,Node 监听本地端口(如 3000),Nginx 监听 80 转发给 Node。这种方式更灵活,便于跨平台迁移。
4. PHP 应用
- 安装:在 IIS 管理器中,双击 FastCGI 设置。
- 配置:添加新应用程序,可执行文件指向
php-cgi.exe的路径。 - 注意:现在更多使用 Composer + PHP CLI 结合 Nginx/Apache,纯 IIS + PHP 的配置相对繁琐,且社区支持度不如 Linux 环境。如果可能,建议考虑 WSL2 或 Linux 服务器。
五、 安全加固(生产环境必做)
-
HTTPS 强制跳转:
- 申请 SSL 证书(Let’s Encrypt 免费证书可通过 Certify The Web 工具自动续期,或购买阿里云/腾讯云证书)。
- 在 IIS 中导入证书,并在站点绑定中添加
https类型,指向该证书。 - 安装 URL Rewrite 模块(Microsoft URL Rewrite Module),配置规则将所有 HTTP 请求 301 重定向到 HTTPS。
-
最小权限原则:
- 网站物理文件夹的 NTFS 权限,只给予
IIS_IUSRS组和SYSTEM读取和执行权限,严禁给予写入权限,除非是上传目录(且上传目录需单独隔离并禁用脚本执行)。
- 网站物理文件夹的 NTFS 权限,只给予
-
隐藏版本信息:
- 在
web.config或 IIS 管理器中禁用详细错误消息对外显示,防止泄露技术栈版本信息供黑客扫描。
- 在
-
定期更新:
- 保持 Windows Update 开启,及时修补 IIS 和相关框架的安全漏洞。
六、 常见问题排查
- 502 Bad Gateway:通常是 .NET Core 应用崩溃,或者应用程序池回收过快。查看 事件查看器 (Event Viewer) -> Windows 日志 -> 应用程序,寻找错误源为
.NET Runtime或IIS Express的记录。 - 403 Forbidden:权限问题。检查文件夹权限,确保
IIS_IUSRS有读取权限;或者检查web.config中的<directoryBrowse enabled="false" />设置(虽然设为 false 不会导致 403,但如果没默认文档可能会)。 - 无法连接数据库:检查 SQL Server 是否允许远程连接,以及 Windows 防火墙是否放行了 SQL 端口(默认 1433)。
总结
Windows Server 2022 搭建 Web 服务器,IIS 是首选。它的优势在于与操作系统深度集成,资源占用低,管理界面友好。
- 如果是 .NET 全家桶项目,IIS 是原生支持,体验最佳。
- 如果是 Java/Python/Go 项目,建议在 Windows 上运行对应的容器(Docker Desktop for Windows)或通过反向X_X(Nginx/Caddy)转发到本地端口,而不是直接在 IIS 里硬跑。
- 如果是 高并发互联网业务,考虑到生态和社区支持,长期来看迁移到 Linux (CentOS/Ubuntu) + Nginx/Tengine 是更主流的选择,但在 Windows 环境下,上述 IIS 方案完全能满足 90% 的企业内部系统和中小型公网业务需求。
CLOUD云枢