服务公告

服务公告 > 综合新闻 > IIS:站点管理

IIS:站点管理

发布时间:2026-04-23 08:00

一、前言

搞过IIS的人都知道,最烦的是每隔段时间就要新建站点、绑定域名、配证书,手动点图形界面点到你手抽筋。尤其遇到要批量部署或者紧急故障恢复时,鼠标操作简直是噩梦。这篇直接上命令行,让你5分钟搞定站点从创建到HTTPS配置全套流程。

二、操作步骤

步骤1:确认IIS已安装且WebAdministration模块可用

PS C:\> Import-Module WebAdministration; Get-Website | Select Name, State, PhysicalPath Name State PhysicalPath ---- ----- ------------ Default Web Site Started C:\inetpub\wwwroot

能列出站点信息说明模块正常,没安装的话先跑 Add-WindowsFeature Web-Server

步骤2:创建新站点目录结构

PS C:\> New-Item -Path "E:\WebApps\myapp" -ItemType Directory -Force PS C:\> New-Item -Path "E:\WebApps\myapp\logs" -ItemType Directory Directory: E:\WebApps\myapp Mode LastWriteTime Length Name ---- ------------- ------ ---- d----- 2024/3/15 10:30:48 logs

日志目录单独建,后面配access log和error log用得上,别全堆一起。

步骤3:创建应用程序池

PS C:\> Import-Module WebAdministration PS C:\> New-WebAppPool -Name "MyAppPool" PS C:\> Set-ItemProperty IIS:\AppPools\MyAppPool managedRuntimeVersion "v4.0" PS C:\> Set-ItemProperty IIS:\AppPools\MyAppPool -Name processModel.identityType -Value "ApplicationPoolIdentity" Name State ---- ----- MyAppPool Started

identity用 ApplicationPoolIdentity 最安全,别傻乎乎用LocalSystem,那等于给攻击者开了后门。

步骤4:创建站点并绑定到物理路径

PS C:\> New-Website -Name "MyApp" -PhysicalPath "E:\WebApps\myapp" -ApplicationPool "MyAppPool" -Port 8080 Name ID State Physical Path Binding ---- -- ----- -------------- -------- MyApp 2 Started E:\WebApps\myapp :8080:

端口先别用80/443,等配置完再改,避免跟现有站点冲突。

步骤5:绑定主机头(多站点共用80端口的核心)

PS C:\> New-WebBinding -Name "MyApp" -Protocol http -HostHeader "www.example.com" -Port 80 PS C:\> Get-WebBinding -Name "MyApp" protocol bindingInformation hostHeader -------- ------------------ ---------- http :80:www.example.com www.example.com

主机头绑定做好了,多个子域名指向同一IP的不同站点,全靠这个。

步骤6:配置HTTP重定向到HTTPS(可选但强烈建议)

PS C:\> Install-WindowsFeature Web-Http-Redirect PS C:\> Set-WebConfigurationProperty -PSPath IIS:\Sites\MyApp -Filter /httpRedirect -Name enabled -Value true PS C:\> Set-WebConfigurationProperty -PSPath IIS:\Sites\MyApp -Filter /httpRedirect -Name destination -Value "https://www.example.com$1" PS C:\> Set-WebConfigurationProperty -PSPath IIS:\Sites\MyApp -Filter /httpRedirect -Name exactDestination -Value true 状态确认: PS C:\> Get-WebConfigurationProperty -PSPath IIS:\Sites\MyApp -Filter /httpRedirect -Name enabled True

301重定向对SEO友好,别让用户访问到明文HTTP版本。

步骤7:申请并绑定SSL证书(Let's Encrypt示例)

PS C:\> $cert = New-SelfSignedCertificate -DnsName "www.example.com" -CertStoreLocation cert:\LocalMachine\My PS C:\> $binding = New-WebBinding -Name "MyApp" -Protocol https -Port 443 -HostHeader "www.example.com" PS C:\> $binding.AddSslCertificate($cert.Thumbprint, "My") 验证绑定: PS C:\> netsh http show sslcert SSL Certificate bindings: ----------------- Hostname:port : www.example.com:443 Certificate Hash : a1b2c3d4e5f6...

生产环境建议用Certbot或者 ACMESharp 自动续期,别用手工证书,到期忘了换就呵呵了。

步骤8:验证站点可访问

PS C:\> iisreset PS C:\> Invoke-WebRequest -Uri "https://www.example.com" -SkipCertificateCheck StatusCode : 200 StatusDescription : OK Content : ...站点内容...

能返回200说明站点跑起来了,有问题先查防火墙和 bindings 配置。

三、常见问题FAQ

Q:站点创建后访问提示403 Forbidden,目录权限也给了?

A:大概率是IIS_IUSRS组没加或者应用程序池身份不对。先跑 Get-Acl E:\WebApps\myapp | fl 看实际权限,检查应用程序池用的什么账号。常见坑是匿名认证用的IUSR账户不在文件夹访问列表里。建议统一用ApplicationPoolIdentity,然后给对应AppPool账号加目录权限。

Q:同一IP绑定多个HTTPS站点,报错"另一个同名站点已使用此绑定"?

A:HTTPS不像HTTP能用主机头区分,必须每个站点用不同端口或者不同IP。解决方案:买多IP服务器,或者443端口后面跟证书SNI。跑 Get-WebBinding -Protocol https 看现有绑定,确认目标站点用的证书支持SNI(Server Name Indication),Windows Server 2012以上默认开启。老系统2008 R2就乖乖用不同端口吧。

Q:想批量创建20个站点,一个个New-Website要命,有没有批量脚本?

A:上来就问这个说明你是做运维的料。给你个模板:

$siteList = @( @{Name="Site1"; Host="site1.com"; Path="E:\WebApps\site1"}, @{Name="Site2"; Host="site2.com"; Path="E:\WebApps\site2"} ) foreach ($site in $siteList) { New-Item -Path $site.Path -ItemType Directory -Force | Out-Null New-Website -Name $site.Name -PhysicalPath $site.Path -Port 80 -HostHeader $site.Host Write-Host "Created $($site.Name)" -ForegroundColor Green }

数组定义站点信息,循环跑完收工。生产环境记得加错误处理和日志记录。

Q:站点迁移怎么保证 downtime 最少?

A:套路是这样:1)新服务器先把站点建好配好,测试通过;2)DNS TTL先改成60秒;3)迁移前把旧站点停了;4)DNS切到新IP;5)观察几天没问题再把旧服务器下线。别在迁移过程中两边同时改,数据库同步出问题你就等着半夜起来吧。

四、总结

核心要点就三条:

  • PowerShell命令比图形界面快10倍,批量操作必须上脚本
  • 应用程序池身份用 ApplicationPoolIdentity,别偷懒用LocalSystem
  • SSL证书必须自动续期,手工管理早晚出事

延伸阅读:

记住:能用命令行搞定的事就别点鼠标,脚本写好了下次30秒搞定,图形界面点半天下次还是从头来。运维的核心是把重复劳动自动化,别让自己成为人肉部署工具。

上一篇: Git:Git安全加固

下一篇: Claude:安装配置