在 Windows Server 2022 上部署网站,最常用且推荐的方式是使用 IIS (Internet Information Services)。以下是完整的部署流程,涵盖从环境搭建到上线的各个环节:
一、安装 IIS 角色
- 打开 服务器管理器(Server Manager)
- 点击 “添加角色和功能”
- 选择 “基于角色或基于功能的安装” → 下一步
- 选择本地服务器 → 下一步
- 在“服务器角色”中勾选:
- ✅ Web 服务器 (IIS)
- 展开后建议勾选以下子功能(根据需求):
- ASP.NET 4.8(若使用 .NET Framework 应用)
- CGI(如需运行脚本)
- 静态内容
- HTTP 重定向
- 身份验证(如 Windows 身份验证、基本身份验证等)
- ✅ Web 服务器 (IIS)
- 完成向导并重启(可选,但建议安装完成后重启)
💡 也可通过 PowerShell 快速安装:
Install-WindowsFeature Web-Server, Web-Asp-Net45, Web-CGI -IncludeManagementTools
二、准备网站文件
- 将网站代码上传至服务器(例如
C:inetpubwwwrootmywebsite)- 支持语言:ASP.NET、PHP、Node.js(需额外配置)、Python(需 WSGI/IIS Handler)等
- 确保目录权限正确:
- 右键文件夹 → 属性 → 安全
- 添加用户组
IIS_IUSRS或IUSR,赋予 读取/执行 权限 - 若为动态站点(如 PHP),还需给
IIS AppPoolYourAppPoolName写入权限
三、创建网站与绑定
- 打开 IIS 管理器(开始菜单搜索 "IIS")
- 展开左侧树 → 右键 网站 → 添加网站
- 网站名称:
MyWebsite - 物理路径:
C:inetpubwwwrootmywebsite - 绑定设置:
- 类型:
http或https - IP 地址:
所有未分配或指定 IP - 端口:默认
80(HTTP)或443(HTTPS) - 主机名:如
www.example.com(需 DNS 解析)
- 类型:
- 网站名称:
- 点击 确定
🔐 若启用 HTTPS:
- 需先导入 SSL 证书(
.pfx或.cer+.key)- 在 IIS 中选中网站 → 右侧 绑定 → 添加
https绑定 → 选择证书
四、配置应用程序池(关键!)
- 在 IIS 管理器中,展开 应用程序池
- 找到对应网站的池(通常自动创建,如
DefaultAppPool) - 右键 → 高级设置:
- .NET CLR 版本:选择
无托管代码(纯静态/Node/PHP)或对应版本(如 v4.0) - 管道模式:经典 vs 集成(现代应用推荐“集成”)
- 标识:建议使用
ApplicationPoolIdentity(更安全),并确保该身份有目录访问权限
- .NET CLR 版本:选择
⚠️ 若使用 PHP:
- 需安装 Microsoft IIS PHP Handler
- 配置
php.ini和web.config以启用 FastCGI
五、防火墙与安全加固
1. 开放端口
- 打开 Windows Defender 防火墙 → 高级设置
- 添加入站规则:
- TCP 80(HTTP)
- TCP 443(HTTPS)
- (可选)TCP 8080 等自定义端口
2. 基础安全建议
- 禁用不必要的 IIS 功能模块
- 定期更新 Windows 和 IIS 补丁
- 使用强密码策略保护管理员账户
- 限制匿名访问(生产环境建议启用身份验证)
- 配置日志记录(IIS 日志位于
%SystemDrive%inetpublogsLogFiles)
六、测试与验证
- 在浏览器访问:
http://<服务器IP>或http://<域名> - 检查:
- 页面是否正常加载?
- 动态功能(如登录、数据库连接)是否工作?
- SSL 证书是否有效(浏览器显示锁图标)?
🧪 可用工具辅助:
curl http://localhost(命令行测试)- SSL Labs Test(检测 HTTPS 配置)
七、常见场景补充
| 应用场景 | 额外步骤 |
|---|---|
| Node.js 应用 | 安装 Node.js → 用 iisnode 模块 → 配置 web.config 反向X_X |
| PHP 应用 | 下载 PHP for Windows → 安装 IIS PHP Handler → 配置 php.ini |
| Docker 容器化 | 安装 Docker → 构建镜像 → 发布到 IIS(需配合 docker-compose 或手动映射) |
| 多站点托管 | 每个站点独立应用程序池 + 不同绑定(IP:Port 或 Host Header) |
需要我针对某种具体技术栈(如 .NET Core、Laravel、WordPress on IIS)提供详细配置示例吗?
云服务器