跳转到主内容
websoft网络软件专家 - 深耕网络技术,打造实用软件!

怎么解决 Windows Server 部署 Web 应用时提示的 80 端口占用冲突

Windows Server 上 80 端口被 PID=4 的 System 进程占用,实为 HTTP.sys 托管的系统服务(如 IIS、WinRM、BranchCache、SQL Server Reporting Services)所致;需通过 netstat 和 tasklist 定位具体服务,再停用或重配;若仍被占,可禁用 HTTP.sys 或改用其他端口部署。 win dows server 上部署 web 应用(如 tomcat、apache 或 nginx)时提示 80 端口被占用,通常不是某个普通应用在抢端口,而是系统级服务默认监听了它——最常见的是 pid=4 的 system 进程。这不是用户能直接结束的进程,必须定位背后的实际服务并针对性处理。 确认谁在真正占用 80 端口 以管理员身份运行命令提示符,执行以下两步: netstat -ano | findstr :80 —— 查看监听 80 端口的 PID(大概率是 4) tasklist /svc /fi "PID eq 4" —— 查看 PID=4 关联的服务名(注意不是“System”本身,而是它托管的 HTTP.sys 驱动所承载的服务) 输出中常出现的服务包括: W3SVC(IIS)、WinRM、BranchCache、SQL Server Reporting Services 。这些才是真正的“占用者”。 停用或重配常见系统服务 根据上一步查到的具体服务,选择对应操作: ClawUsage Windows Hardlock 通过聊天(Telegram / 飞书)执行本地 `clawusage` 监控命令。当用户输入 `/clawusage ...`,或提出“查看 Codex 用量”、“开启/关闭自动…”等请求时触发使用。 下载 IIS(World Wide Web Publishing Service) :若不用 IIS,进「服务」管理器(services.msc)停止 World Wide Web Publishing Service ,并设为“禁用”;或运行 net stop w3svc SQL Server Reporting Services :找到服务名如 SQLServerReportingServices 或 ReportServer ,停止并设为“禁用”(该服务常随 SQL Server Express 自启,易反复占 80) WinRM(Windows Remote Management) :不建议直接禁用(影响远程管理),可改端口:运行 winrm set winrm/config/listener?Address=*+Transport=HTTP @{Port="5985"} ,再重启 WinRM 服务 BranchCache :若非企业内网分发场景,直接在服务中禁用即可 关闭 HTTP.sys 驱动(治本但需谨慎) 如果以上服务都已停用,80 端口仍被占,说明底层 HTTP 协议栈(HTTP.sys)仍在监听。这是 System 进程托管的核心机制: 运行 net stop http /y 强制卸载 HTTP.sys 驱动(会同时停掉所有依赖它的服务) 永久禁用:执行 sc config http start= disabled ,然后重启服务器 ⚠️ 注意:禁用后 IIS、WinRM HTTP 模式、.NET Core Kestrel 的
UseHttpSys()
等将不可用,仅推荐纯自托管(如 Nginx 反代、Tomcat 直连)环境使用 临时释放或换端口部署(快速上线首选) 若需立即启动应用且无法停系统服务,两个低风险方案: 改用其他端口 :Tomcat 改
server.xml
中 Connector 的 port="8080";Nginx 改
listen 8080;
;Apache 改
Listen 8080
。再配反向代理或防火墙端口转发 保留 80 端口但让渡给你的应用 :停掉 IIS 后,用 netsh http add urlacl url=http://+:80/ user=Everyone 授予你的应用监听权限(适用于 .NET Core 等基于 HTTP.sys 的程序)

相关文章