根本原因是http.sys驱动(pid 4)占用80端口,需先执行net stop http并sc config http start= disabled禁用服务,再停用iis相关服务,最后用netstat验证端口释放。

Win10下启动Nginx、苍穹外卖或自建Web服务时,浏览器打不开首页、Nginx报错“bind() to 0.0.0.0:80 failed”,根本原因是IIS或系统级HTTP.sys驱动已抢先监听80端口,而PID为4的System进程无法直接结束——必须从服务控制和内核驱动两层入手清理。
确认80端口当前被谁锁定
以管理员身份运行CMD或PowerShell,执行:
netstat -ano | findstr :80
若输出中显示 0.0.0.0:80 或 [::]:80 对应的PID是4,基本可断定是HTTP.sys在后台接管;若PID是其他数字(如4640、1232),则需用 tasklist /svc /fi "pid eq 4640" 追查对应服务名称。
这一步不能跳过。跳过会导致后续操作全无针对性,比如盲目禁用IIS却没动HTTP.sys,重启后80端口依然被占。
停止并禁用HTTP服务(核心步骤)
HTTP服务是HTTP.sys的宿主服务,PID为4的占用根源就在这里。仅停掉IIS管理器或World Wide Web Publishing Service不够,必须终止该服务本身:
① 在管理员CMD中依次执行:
net stop http
(系统会提示将同时停止依赖它的服务,输入 y 确认)
② 立即执行永久禁用命令:
sc config http start= disabled
【必须在net stop http成功后立刻执行sc config】,否则重启后服务自动恢复,80端口再次被锁死。该命令修改的是服务启动类型,不是临时状态,无需重启即生效(但需重启才能彻底释放端口)。
关闭IIS相关服务(辅助清理)
方法一:图形界面操作
打开「控制面板 → 程序 → 启用或关闭Windows功能」→ 取消勾选「Internet Information Services」及其全部子项 → 点击确定 → 等待系统卸载完成。
方法二:命令行批量关闭
执行以下三条命令(每条单独回车):
net stop w3svc
net stop iisadmin
sc config w3svc start= disabled
注意:w3svc 是IIS核心服务,iisadmin 是其管理服务,二者必须都停且禁用,否则残留服务可能重新触发HTTP.sys绑定80端口。
验证端口是否真正释放
执行 netstat -ano | findstr :80,确认无任何输出。
若仍有结果,说明有第三方软件(如Docker Desktop、VMware NAT服务、某些杀毒软件的Web防护模块)在监听80。此时需逐个排查:
– 打开任务管理器 → 服务选项卡 → 查找含“http”“web”“nginx”“docker”的服务 → 右键停止;
– 检查Docker Desktop设置中是否启用了“Use the WSL 2 based engine”并绑定了80端口;
– 运行 PowerShell 命令 Get-NetTCPConnection -LocalPort 80 | Format-List * 查看OwningProcess,再用 Get-Process -Id xxx 定位进程名。
这一步做完,80端口即可被你的Nginx、苍穹外卖后端或任意Web服务正常绑定。










