Windows Server 2012 R2上部署IIS 8.5:从零到生产环境的完整指南
1. 环境准备与基础概念在Windows Server 2012 R2上部署IIS 8.5之前首先要确保系统环境符合要求。我建议先检查操作系统版本是否为标准版或数据中心版这两个版本都完整支持IIS功能。打开PowerShell输入以下命令可以快速验证系统信息Get-ComputerInfo | Select-Object OsName, OsVersionIIS 8.5作为微软推出的Web服务器软件相比前代增加了动态网站加速、WebSocket协议支持等新特性。在实际项目中我经常用它来托管ASP.NET网站、PHP应用甚至静态HTML页面。对于刚接触的朋友可以把IIS想象成一个数字房东它负责接收访客客户端请求并将其引导到正确的房间网站目录。硬件准备方面需要注意至少2核CPU和4GB内存运行ASP.NET应用建议8GB以上40GB以上的系统磁盘空间静态网站每万次访问约消耗100MB内存动态网站建议配置SSD存储提升IO性能提示生产环境务必配置RAID1或RAID10阵列我曾遇到过单块硬盘故障导致服务中断的事故。2. 图形化安装IIS 8.52.1 通过服务器管理器安装这是最直观的安装方式适合大多数管理员。按下WinX组合键选择服务器管理器在仪表板点击添加角色和功能。这个向导我用了上百次有几个关键点需要注意在服务器角色步骤中勾选Web服务器(IIS)时系统会弹出添加必备功能的提示框一定要点击添加功能按钮进入功能选择界面时建议同时安装.NET Framework 3.5和4.5两个版本避免后续兼容性问题2.2 功能组件选择IIS的模块化设计允许按需安装组件。根据我的项目经验以下组合适合大多数场景功能分类必选组件可选组件安全性请求过滤、IP限制客户端证书映射性能静态内容压缩动态内容压缩管理IIS管理控制台IIS 6管理兼容性踩坑提醒曾经有个客户忘记安装ASP.NET 4.5导致网站报503错误花了两小时才排查出来。安装完成后在浏览器输入http://localhost应该能看到IIS欢迎页面。如果遇到端口冲突可以用以下命令检查占用情况netstat -ano | findstr :803. 命令行自动化部署3.1 使用DISM工具对于需要批量部署的场景命令行方式更高效。微软已弃用老旧的pkgmgr推荐使用DISM工具。这个命令可以安装完整IIS功能集DISM /Online /Enable-Feature /FeatureName:IIS-WebServerRole /FeatureName:IIS-WebServer /FeatureName:IIS-CommonHttpFeatures /FeatureName:IIS-StaticContent /FeatureName:IIS-DefaultDocument /FeatureName:IIS-DirectoryBrowsing /FeatureName:IIS-HttpErrors /FeatureName:IIS-HttpRedirect /FeatureName:IIS-ApplicationDevelopment /FeatureName:IIS-ASPNET /FeatureName:IIS-NetFxExtensibility /FeatureName:IIS-ASPNET45 /FeatureName:IIS-NetFxExtensibility45 /FeatureName:IIS-ASP /FeatureName:IIS-CGI /FeatureName:IIS-ISAPIExtensions /FeatureName:IIS-ISAPIFilter /FeatureName:IIS-ServerSideIncludes /FeatureName:IIS-HealthAndDiagnostics /FeatureName:IIS-HttpLogging /FeatureName:IIS-LoggingLibraries /FeatureName:IIS-RequestMonitor /FeatureName:IIS-HttpTracing /FeatureName:IIS-CustomLogging /FeatureName:IIS-ODBCLogging /FeatureName:IIS-Security /FeatureName:IIS-BasicAuthentication /FeatureName:IIS-WindowsAuthentication /FeatureName:IIS-DigestAuthentication /FeatureName:IIS-ClientCertificateMappingAuthentication /FeatureName:IIS-IISCertificateMappingAuthentication /FeatureName:IIS-URLAuthorization /FeatureName:IIS-RequestFiltering /FeatureName:IIS-IPSecurity /FeatureName:IIS-Performance /FeatureName:IIS-HttpCompressionStatic /FeatureName:IIS-HttpCompressionDynamic /FeatureName:IIS-WebDAV /FeatureName:IIS-WebServerManagementTools /FeatureName:IIS-ManagementScriptingTools /FeatureName:IIS-ManagementService /FeatureName:IIS-IIS6ManagementCompatibility /FeatureName:IIS-Metabase /FeatureName:IIS-WMICompatibility /FeatureName:IIS-LegacyScripts /FeatureName:IIS-FTPServer /FeatureName:IIS-FTPSvc /FeatureName:IIS-FTPExtensibility /FeatureName:NetFx4Extended-ASPNET45 /FeatureName:IIS-ApplicationInit /FeatureName:IIS-WebSockets /FeatureName:IIS-CertProvider /FeatureName:IIS-ManagementConsole /FeatureName:IIS-LegacySnapIn3.2 PowerShell部署方案对于习惯PowerShell的管理员这个命令更简洁Install-WindowsFeature -Name Web-Server -IncludeAllSubFeature -IncludeManagementTools我通常会用以下脚本检查安装结果Get-WindowsFeature -Name Web-* | Where-Object {$_.InstallState -eq Installed}4. 生产环境配置优化4.1 安全加固措施部署到生产环境前这些安全设置必不可少删除默认站点右击Default Web Site选择删除关闭目录浏览在功能视图中双击目录浏览选择禁用自定义错误页避免泄露系统信息请求过滤屏蔽常见攻击特征如../等路径遍历字符建议定期运行IIS Crypto工具调整加密套件禁用不安全的SSL协议。这是我用的基准配置system.webServer security requestFiltering hiddenSegments add segmentweb.config / /hiddenSegments denyUrlSequences add sequence.. / /denyUrlSequences /requestFiltering /security /system.webServer4.2 性能调优技巧在高流量场景下这些参数调整能让性能提升30%以上启用动态内容压缩调整应用池回收策略固定间隔回收改为特定时间如凌晨2点内存限制设为物理内存的70%配置输出缓存Set-WebConfigurationProperty -Filter /system.webServer/caching -Name enabled -Value true对于静态资源我习惯添加客户端缓存头staticContent clientCache cacheControlModeUseMaxAge cacheControlMaxAge7.00:00:00 / /staticContent5. 常见问题排查5.1 安装失败处理遇到安装错误时首先检查C:\Windows\Logs\CBS目录下的日志文件。常见问题包括依赖项缺失特别是.NET Framework 3.5需要单独安装源文件Windows更新冲突运行sfc /scannow修复系统文件磁盘空间不足清理WinSxS文件夹5.2 网站无法访问按照这个检查清单逐步排查防火墙规则测试时可直接关闭防火墙测试netsh advfirewall set allprofiles state off应用池是否启动网站绑定配置特别是主机名和端口文件系统权限IIS_IUSRS需要读取权限曾经有个案例是因为IPv6绑定导致的问题在绑定中取消IPv6选项后立即恢复正常。6. 高级功能配置6.1 负载均衡设置IIS 8.5的应用程序请求路由(ARR)可以实现反向代理。安装ARR模块后在服务器级配置中创建服务器场并添加节点配置健康检查策略设置负载均衡算法我推荐最少当前请求典型配置片段webFarm nameMyFarm enabledtrue server addressserver1 enabledtrue / server addressserver2 enabledtrue / applicationRequestRouting protocol timeout00:00:30 / /applicationRequestRouting /webFarm6.2 多站点托管通过主机头绑定可以实现单IP托管多个网站右键网站选择添加网站为每个站点指定唯一主机名如www.site1.com在DNS服务器添加A记录指向该IP对于开发测试我习惯修改本机hosts文件快速验证127.0.0.1 www.site1.com 127.0.0.1 www.site2.com7. 监控与维护7.1 实时监控方案IIS自带的当前请求视图非常有用但生产环境建议配置启用失败请求跟踪Set-WebConfigurationProperty -Filter /system.webServer/tracing/traceFailedRequests -Name enabled -Value true配置性能计数器监控关键指标Web Service\Total Bytes Sent/secASP.NET\Requests/SecMemory\Available MBytes7.2 日志分析技巧日志默认存储在C:\inetpub\logs\LogFiles我常用Log Parser Studio分析日志SELECT TOP 100 cs-uri-stem, COUNT(*) AS Hits FROM ex*.log GROUP BY cs-uri-stem ORDER BY Hits DESC定期归档日志可以通过配置日志文件回滚策略实现避免磁盘写满。曾经因为忘记设置日志轮转导致200GB的日志文件占满整个系统盘。8. 备份与灾难恢复8.1 配置备份使用appcmd命令可以轻松备份整个IIS配置%windir%\system32\inetsrv\appcmd add backup MyBackup我习惯将备份脚本加入计划任务每周自动执行。恢复时只需appcmd restore backup MyBackup8.2 服务器迁移对于整机迁移这些步骤很关键使用Web Deploy工具打包站点msdeploy -verb:sync -source:appHostConfigDefault Web Site -dest:packagec:\backup\site.zip导出应用池配置Export-WebConfiguration -Name DefaultAppPool -PhysicalPath C:\inetpub\temp -Force在新服务器导入配置记得迁移后要重新配置加密密钥特别是使用表单认证的ASP.NET应用aspnet_regiis -px MyKeys C:\keys.xml -pri