把网站发布到外网IIS服务器,说白了就是让一台有公网IP的Windows机器,通过IIS把网页内容发给互联网上的访客。这件事不难,但细节没弄好,就会卡在403、404或者外网打不开。我平时部署时,会先把服务器、IIS、文件、绑定、防火墙这几块理清楚。
先准备服务器。阿里云、腾讯云、华为云买一台Windows Server,系统选2019或2022都行,IIS版本都是10。买的时候注意公网IP,带宽按访问量选,个人站1M到5M够用。服务器到手后,远程桌面连上去,在服务器管理器里点“添加角色和功能”,一路到“服务器角色”,勾选“Web服务器(IIS)”。展开后把静态内容、默认文档、目录浏览、HTTP错误、ASP.NET、.NET扩展、ISAPI扩展、ISAPI筛选器都勾上。如果网站是ASP.NET Core,还要装对应的.NET Hosting Bundle,版本要和项目匹配,比如.NET 6、7、8,装完在IIS里重启一下。
文件怎么上去?Visual Studio里右键项目,选“发布”,目标选“文件夹”,配置选Release,发布到一个本地文件夹。然后把整个发布文件夹用远程桌面复制到服务器,比如D:\sites\mysite。别直接扔在C:\inetpub\wwwroot下面,虽然默认网站能用,但后面多站点会乱。复制完检查权限,右键文件夹属性,安全,给IIS_IUSRS读取和执行权限。如果有上传功能,给上传目录加修改权限。数据库连接字符串别用本机开发的那套,改成服务器上的地址和账号。
接下来在IIS里建站。打开IIS管理器,左边点服务器名,右键“网站”,选“添加网站”。网站名称自己起,物理路径选D:\sites\mysite。绑定这里很关键:类型http,IP地址选“全部未分配”或者服务器公网IP,端口80,主机名填你的域名,比如www.example.com。如果暂时没域名,主机名留空,用IP访问。应用程序池可以新建一个,.NET CLR版本按项目选,ASP.NET Core选“无托管代码”,托管管道模式用“集成”。建好后,点应用程序池,把刚建的池启动,再点网站,右侧“浏览”看看本机能不能打开。
域名要解析到公网IP。在域名服务商那里加一条A记录,主机记录填www或者@,记录值填服务器公网IP。国内服务器必须备案,没备案域名解析到大陆IP,80和443会被拦,访问会提示未备案。香港或者海外服务器不用备案,但速度看线路。解析生效一般几分钟到几小时,可以用ping或nslookup查。

外网访问不了,八成是防火墙或安全组。Windows防火墙里新建入站规则,放行TCP 80和443。云服务器控制台的安全组也要放行同样端口,入方向。3389远程桌面端口别对全网开放,最好只允许自己的IP,避免被扫。放行后,用手机4G网络访问域名,不要用公司WiFi,因为有些内网会屏蔽。如果还不行,在服务器上跑netstat -ano | findstr :80,看80端口有没有被IIS监听。没监听就是绑定或站点没启动,监听了但外网不通,查安全组和DNS。
HTTPS现在基本是标配。云厂商有免费SSL证书,下载IIS版本,在IIS管理器里点服务器证书,导入pfx,输入密码。然后网站绑定里添加https,端口443,选证书,主机名填域名。想强制跳转,装URL Rewrite模块,加规则把http跳到https。证书到期前记得续。
还有几个容易踩的坑。应用程序池标识权限不够,网站会报500.19或401.3,给IIS_IUSRS和IIS AppPool\池名称读权限。web.config里写了开发环境的配置,发布后没改,数据库连不上。默认文档没设,访问域名出现目录列表或者404,在IIS里把index.html、default.aspx加到默认文档。MIME类型缺了,字体或视频加载失败,手动加扩展名。端口被占用,换端口或者停掉占用程序。ASP.NET Core发布后,IIS只是反向代理,必须装Hosting Bundle,不然报500.19或502。
更新网站时,直接把新发布文件覆盖旧文件,但最好先停应用程序池,覆盖完再启动,避免文件被锁。小站用文件夹发布最省事,团队协作可以用Web Deploy或者FTP,但Web Deploy配置麻烦一点,FTP记得用FTPS,别用明文。
整个流程走下来,快的话半小时能搞定。核心就是:服务器装好IIS,文件放对位置,IIS绑定域名和端口,防火墙和安全组放行,域名解析过去。哪一步漏了,外网就访问不了。按这个顺序排查,基本都能找到原因。