启用apache,发现80端口被占用【已解决】

十分感谢作者。转载:http://www.2cto.com/os/201111/111269.html

前段时间停止了Apache,结果在打开的时候发现无法打开,80端口被占用,于是win+r 运行cmd

输入netstat -ano

可以看到80端口被PID4占用,于是打开任务管理器-进程-查看,选择列,勾选PID

可以看到pid 4 的被NT kernel & System 占用

在网上找了很久找到解决方案

http://www.cameroncooke.com/2009/01/25/windows-7-uses-port-80-and-makes-it-impossible-to-install-apache-solution/comment-page-1/#comments

原文:

翻译如下:

该进程是Http.sys。它是http API的驱动组件,Http栈服务器。如果该端口被Http.sys占用,说明一些正在使用http.sys的应用程序在运行。这就是阻止Apache运行的原因,因为Http.sys占用着80端口。我们提供了一种应用程序的机制来帮助控制端口共享,但是我需要调查导致你遇到这种困难的是什么特殊应用程序。如果你能提供给我们“netsh http show servicestate”这条命令的输出结果,我就能找出是哪个应用程序在使用Http.sys。在你禁用Http.sys之前,请按照下面的步骤来运行命令:

1. sc config http stat = demand

2. reboot

3. run the command(netsh http show servicestat)as administrator

在你使用这个命令之前,你可以按照下面步骤禁用http.sys:

1. net stop http

2. Sc config http start= disabled

于是运行net stop http

按y 确定

在运行 Sc config http start= disabled

好了,现在启动Apache,可以启动了。

在查看一下netstat -ano

发现pid 4占用了445端口

### 解决 Windows 下 80 端口system 占用的问题 在 Windows 操作系统中,当遇到 80 端口被 `System` 进程(PID=4)占用时,通常是因为某些内置服务绑定了该端口。以下是详细的分析和解决方案。 #### 1. 情景复现 如果尝试启动 HTTP 或 Web 应用程序(如 Apache、Nginx),并收到类似于“Address already in use”的错误提示,则可能是目标端口已经被占用。通过命令行工具可以确认这一点: ```cmd netstat -ano | findstr :80 ``` 上述命令会列出所有监听 80 端口的进程及其 PID[^1]。 #### 2. 问题溯源 运行以上命令后,可能会发现 PID 为 4 的 `System` 进程正在使用 80 端口。这是由于以下原因之一造成的: - **World Wide Web Publishing Service (W3SVC)**:此服务用于支持 IIS 功能,默认情况下可能绑定到 80 端口。 - **HTTP.sys 驱动程序**:即使未启用 IIS,Windows 可能仍通过 HTTP.sys 注册了对 80 端口的保留[^2]。 可以通过查询注册表进一步验证是否有特定 URL 绑定到了 80 端口: ```regedit HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\HTTP\Parameters\UrlGroups ``` 如果有条目指向 80 端口,则说明存在显式的绑定设置[^3]。 #### 3. 解决方案 针对不同原因提供如下几种处理方式: ##### 方法一:禁用 W3SVC 服务 如果不需要使用 IIS 提供的服务,可以直接停止并禁用相关服务: 1. 打开服务管理界面 (`services.msc`); 2. 定位名为 “World Wide Web Publishing Service” 的项; 3. 将其状态设为已停止,并将其启动类型更改为手动或禁用。 执行完成后重新测试应用程序是否能够成功绑定至 80 端口。 ##### 方法二:修改 HTTP.sys 配置 对于由 HTTP.sys 导致的冲突,需调整其配置文件以移除不必要的绑定规则。具体操作步骤如下: 1. 使用管理员权限打开 PowerShell 并输入以下指令来查看当前预留列表: ```powershell netsh http show urlacl ``` 2. 删除与 80 端口关联的相关记录,例如: ```powershell netsh http delete urlacl url=http://+:80/ ``` 完成这些更改之后再次检查网络连接状况[^4]。 ##### 方法三:更换应用使用的端口号 作为临时措施或者长期策略的一部分,也可以考虑让自己的软件改用其他非标准端口代替默认值(比如改成 8080)。这一步骤相对简单快捷,在不影响现有环境的前提下快速恢复功能可用性[^5]。 --- ### 示例代码片段 下面展示一段简单的 Python 脚本用来检测指定端口的状态: ```python import socket def check_port(host='localhost', port=80): with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s: try: result = s.connect_ex((host, port)) if result == 0: print(f"Port {port} is OPEN.") else: print(f"Port {port} is CLOSED or FILTERED.") except Exception as e: print(e) check_port() ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值