在我的Windows 7系统上安装成功但无法启动Apache 2.4。

27
我正在尝试在我的Windows 7系统上安装并运行Apache 2.4。我进入了Apache 2.4二进制文件目录,并运行了以下命令:注意:我以管理员身份打开了cmd窗口。
C:\Apache24\bin>httpd.exe -k install
它的输出如下:
Installing the Apache2.4 service
The Apache2.4 service is successfully installed.
Testing httpd.conf....
Errors reported here must be corrected before the service can be started.
(OS 10013)An attempt was made to access a socket in a way forbidden by its acces
s permissions.  : AH00072: make_sock: could not bind to address [::]:80
(OS 10013)An attempt was made to access a socket in a way forbidden by its acces
s permissions.  : AH00072: make_sock: could not bind to address 0.0.0.0:80
AH00451: no listening sockets available, shutting down
AH00015: Unable to open log

它安装了Apache 2.4作为服务,但无法启动。看起来本地主机端口80正在使用。这就是"[::]:80"的含义吗?
然后我停止了我留下运行的Apache 2.0服务和MySQL服务,希望停止其中一个可以释放本地主机端口80。
我还运行netstat -o查看端口80是否正在使用。没有使用。
但是,我发现上述套接字正在被一个进程使用,这是一个正在监听上述套接字的进程。
 TCP    [::]:80                User-PC:0              LISTENING       4

我随后运行了tasklist命令,并发现System正在使用pid 4。4位于pid列下方。

System                           4 Services                   0        544 K

最后,由于启动服务的尝试失败,我得到了一个错误,在Windows系统事件中有记录。
Log Name:      System
Source:        Service Control Manager
Date:          2/21/2013 1:58:03 PM
Event ID:      7024
Task Category: None
Level:         Error
Keywords:      Classic
User:          N/A
Computer:      User-PC
Description:
The Apache2.4 service terminated with service-specific error Incorrect function.

Event Xml:
<Event xmlns="http://schemas.microsoft.com/win/2004/08/events/event">
  <System>
    <Provider Name="Service Control Manager" Guid="{555908d1-a6d7-4695-8e1e-26931d2012f4}" EventSourceName="Service Control Manager" />
    <EventID Qualifiers="49152">7024</EventID>
    <Version>0</Version>
    <Level>2</Level>
    <Task>0</Task>
    <Opcode>0</Opcode>
    <Keywords>0x8080000000000000</Keywords>
    <TimeCreated SystemTime="2013-02-21T18:58:03.723988900Z" />
    <EventRecordID>87756</EventRecordID>
    <Correlation />
    <Execution ProcessID="560" ThreadID="7596" />
    <Channel>System</Channel>
    <Computer>User-PC</Computer>
    <Security />
  </System>
  <EventData>
    <Data Name="param1">Apache2.4</Data>
    <Data Name="param2">%%1</Data>
  </EventData>
</Event>

尝试启动时出现的错误提示显示,由于缺乏访问权限,make-sock无法绑定到套接字,而这些套接字对我来说看起来像是本地主机端口80。例如,

  (OS 10013)An attempt was made to access a socket in a way forbidden by its acces
    s permissions.  : AH00072: make_sock: could not bind to address [::]:80

有人能告诉我我做错了什么吗?


这实际上帮助我解决了我的问题,顺便说一下,我的问题完全不同,但我遇到了完全相同的服务启动错误"The Apache2.4 service terminated with service-specific error Incorrect function."。这个问题引导我查看error.log文件 :) - rustyx
你的netstat -o选项让我发现了哪个程序正在绑定80端口,而Skype是我的机器上的罪魁祸首。为了解决这个问题,我谷歌搜索了“skype apache conflict”,并找到了帮助:[链接]https://dev59.com/vm445IYBdhLWcg3wyc9k[/链接]。希望这能帮助任何遇到同样问题的人。 - user1803784
我发现:在运行SKYPE时无法启动Apache。 - Jonathan
我同意Joe的解决方案。在我的情况下,我使用的是Windows 10,Apache一直工作到今天(2017年5月1日)。我更改了Apache安装文件夹中httpd.conf中的“Listen”指令。现在,我可以使用Apache监视器应用程序启动Apache Web服务器,这是我喜欢的方式。 如果您已在Windows上安装了Apache,则应该在开始程序菜单下的Apache下有一个漂亮易于使用的httpd.conf快捷方式。 - Marcus
11个回答

21
抱歉问题有点啰嗦。为了解决我的问题,我只需在httpd.conf中指示apache 2.4监听不同的端口即可。由于系统正在使用pid 4来监听端口80,我不想进一步探究这个问题。

我在httpd.conf中添加了以下内容。 Listen 127.0.0.1:122


4
很可能,IIS World Wide Web发布服务(W3SVC)将使用PID 4。要释放该端口,请前往Windows的服务并停止IIS。 - Griffin

17

1
然后,由于IIS会在启动时重新启动,因此您必须在每次启动后执行此操作。 - RiggsFolly
为了避免这种情况,请进入服务并禁用IIS。注意:是“禁用”,而不是“停止”。在Windows Server 2012中,它被称为“万维网发布服务”。 - Logan
这解决了我的问题,如果停止这个服务,其他服务会有问题吗? - ArigatoManga

8

我也遇到了同样的问题,升级win7到win10后。然后我检查了services.msc并发现"World Wide Web Publishing Service"默认情况下自动运行。所以我将其禁用,再次运行Apache服务。


谢谢!我不知道这个服务是如何被激活的,因为在我的Win7上Apache运行得很好,在我的电脑死机并不得不强制重启之前! - Youssef
谢谢,这对我很有效。对于任何想知道如何禁用该服务的人,只需双击该服务,将启动类型更改为“禁用”。 - undefined

5
端口80可能被Microsoft HTTPAPI使用。
尝试停止以下服务: Web部署代理服务 SQL Server报告服务 SQL Server VSS Writer

谢谢 - 这对我很有帮助(最近安装了SQL Server Express) - Matt Hall

4
我最终解决了这个问题,原因是一些系统(如Skype和系统进程)占用了端口80,您可以使用netstat -ao检查端口80。
请按照以下步骤操作:
  1. 安装完Apache HTTP后,使用cmd命令行进入bin文件夹

  2. 即使出现错误,也要使用httpd.exe -k install将其安装为服务

  3. 现在,请确保该服务已安装(即使未启动)根据您的操作系统

  4. 重启系统,然后您将发现Apache服务将是第一个占用80端口的服务

恭喜,问题已解决。

另一种解决NT内核和系统进程占用该端口的方法是: 在Windows中: 1-打开设备管理器->查看->显示隐藏设备 2-选择“非即插即用驱动程序”->HTTP 3-打开它并从驱动程序中禁用。 - emad omara

2
在我的情况下,这是由于Apache监听的IP地址引起的。之前我将其设置为192.168.10.6,最近Apache服务无法运行。我注意到这是因为我的笔记本电脑wifi最近更改了,并且新的IP不同。将wifi IP修复为笔记本电脑以前的IP后,Apache服务再次正常运行,没有任何错误。
另外,如果您不想更改wifi IP,则可以删除/注释httpd.conf文件中的硬编码IP以解决冲突。

1

如果你正在使用Windows操作系统并且认为Skype不是问题所在,那么你可能想要检查任务管理器,并检查“显示来自所有用户的进程”,确保没有httpd.exe的条目。否则,结束其进程。这解决了我的问题。


1
所以,这就是为什么我会发两个(或更多)帖子的原因。
当启动服务时我也遇到了同样的问题(无法打开日志文件)。
我以为是因为我试图将htdocs放在VeraCrypt加密容器中,这太荒唐了,因为我已经把这个容器挂载了,并使用了一个联接点来保持路径不变。
然后我读到了可能的原因是内存不足:经过一些测试,我得出了下面的结论。
如果是服务的话,Windows 不会像应用程序一样将页面发送到虚拟内存中以释放足够的内存,我在一个4GiB 64位的 Windows 10 中准备了超过200GiB的页文件作为虚拟内存。
我的解决方法:
1. 运行一个免费的工具以释放内存(在我的测试中是512MiB)。 2. 在立即启动服务之后,它将不会出现错误。
真正的原因是:
我正在使用一个使用1/2物理空闲内存的虚拟机(1.5GiB)。
希望这能帮助其他人。

1

我之前也遇到了同样的问题,后来尝试了在每次更改后重启系统,这对我有帮助:

  1. 在cmd提示符(以管理员身份运行)中使用命令卸载Apache2.4:httpd -k uninstall
  2. 重新启动系统。
  3. 使用命令在cmd提示符(以管理员身份运行)中打开:httpd -k install
  4. 然后执行httpd -k install

希望对你有用。


0

你可以解决这个问题

sudo nano /etc/apache2/ports.conf

并将监听端口更改为8080。

如果你使用 WSL Ubuntu - Ulises HybridReactor
将以下行添加到 /etc/apache2/apache2.conf 文件的末尾: - Ulises HybridReactor
AcceptFilter http none - Ulises HybridReactor

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接