本地计算机上无法启动Apache2 - 问题

71
在安装Apache2时,我在cmd窗口中得到以下信息:
安装Apache2.2服务 Apache2.2服务已成功安装。 测试httpd.conf....
必须更正此处报告的错误才能启动服务。 httpd.exe:无法可靠确定服务器的完全限定域名, 使用192.168.1.3作为ServerName(OS 10048)每个套接字地址(协议/网络地址/端口)只允许一次使用。 :make_sock:无法绑定地址0.0.0.0:80,没有可用的侦听套接字,关闭中 无法打开日志文件。 注意上面的错误或消息,按任意键退出。24 ...
安装完成后看起来一切都很好,但实际上并非如此。如果尝试启动服务,则会收到以下消息:
Windows无法在本地计算机上启动Apache2。 有关更多信息,请查看系统事件记录。如果这是非Microsoft服务,请联系服务供应商,并参考特定于服务的错误代码1。
Apach2版本为2.2.9
有人遇到相同的问题或可以帮助我吗?
20个回答

139

有其他程序监听80端口,可能的嫌疑人是:

  1. Skype(在80端口上监听)
  2. NOD32(将Apache添加到IMON例外列表中以允许Apache绑定)
  3. 其他一些杀毒软件(与上述相同)

纠正的方法是关闭使用80端口的程序,或将其配置为使用不同的端口,或在httpd.conf中使用Listen指令配置Apache侦听不同的端口。对于杀毒软件,请配置杀毒软件允许Apache在您选择的端口上绑定。

诊断哪个应用程序(如果有)绑定到端口80的方法是运行带有以下选项的netstat,查找本地IP地址旁边的:80,并找到PID(最后一列)。然后,在任务管理器中,您可以找到具有前一步骤中获得的PID的进程。(您可能需要在任务管理器中添加PID列)

C:\ Users \ vinko> netstat -ao -p tcp

Conexiones activas

  Proto  Dirección local          Dirección remota        Estado           PID
  TCP    127.0.0.1:1110         127.0.0.1:51373        TIME_WAIT       0
  TCP    127.0.0.1:1110         127.0.0.1:51379        TIME_WAIT       0
  TCP    127.0.0.1:1110         127.0.0.1:51381        ESTABLISHED     388
  TCP    127.0.0.1:1110         127.0.0.1:51382        TIME_WAIT       0
  TCP    127.0.0.1:1110         127.0.0.1:51479        TIME_WAIT       0
  TCP    127.0.0.1:1110         127.0.0.1:51481        TIME_WAIT       0
  TCP    127.0.0.1:1110         127.0.0.1:51483        TIME_WAIT       0
  TCP    127.0.0.1:1110         127.0.0.1:51485        ESTABLISHED     388
  TCP    127.0.0.1:1110         127.0.0.1:51487        TIME_WAIT       0
  TCP    127.0.0.1:1110         127.0.0.1:51489        ESTABLISHED     388
  TCP    127.0.0.1:51381        127.0.0.1:1110         ESTABLISHED     5168
  TCP    127.0.0.1:51485        127.0.0.1:1110         ESTABLISHED     5168
  TCP    127.0.0.1:51489        127.0.0.1:1110         ESTABLISHED     5168
  TCP    127.0.0.1:59264        127.0.0.1:59265        ESTABLISHED     5168
  TCP    127.0.0.1:59265        127.0.0.1:59264        ESTABLISHED     5168
  TCP    127.0.0.1:59268        127.0.0.1:59269        ESTABLISHED     5168
  TCP    127.0.0.1:59269        127.0.0.1:59268        ESTABLISHED     5168
  TCP    192.168.1.34:51278     192.168.1.33:445       ESTABLISHED     4
  TCP    192.168.1.34:51383     67.199.15.132:80       ESTABLISHED     388
  TCP    192.168.1.34:51486     66.102.9.18:80         ESTABLISHED     388
  TCP    192.168.1.34:51490     74.125.4.20:80         ESTABLISHED     388

如果您想禁用Skype监听80和443端口,可以按照链接http://www.mydigitallife.info/disable-skype-from-using-opening-and-listening-on-port-80-and-443-on-local-computer/进行操作。


是的,我讨厌Skype尝试使用端口80...有时我会忘记更改它,然后当我尝试测试我编写的某些Web内容时,Apache就无法启动。 - Powerlord
看起来像是新的nod32问题 :( - vaske
5
你可能想要将上面的netstat更改为:netstat -aon | findstr :80,甚至更快地获取行的方法是:netstat -aon | findstr /r ":80[^0-9]"。此外,你可以从运行 wmic process list brieftasklist 来获取进程ID。 - Nux
这里没有任何东西运行在80端口。 - Wolfpack'08
1
我们可以在以下位置更改Skype的访问端口: 工具 -> 选项 -> 高级 -> 连接 将会有一个带有“使用80端口”的复选框,只需取消勾选并重启Skype进行测试,访问端口就会被更改。 - Dhaval
显示剩余2条评论

116

从命令行运行httpd.exe可以获得准确的问题描述。

我遇到了相同的错误信息,结果是ServerRoot路径配置错误。即使运行setup_xampp.bat,httpd.conf文件中的路径也是错误的。

我的error.log文件是空的,而且启动服务并没有给出有用的错误信息。


7
这个回答真的帮了我。当我尝试通过启动服务来启动Apache时,我只收到了一个通用的错误消息。当我尝试从命令窗口运行C:\ Program Files(x86)\ Apache Software Foundation \ Apache2.2 \ bin \ httpd.exe时,它告诉我它不喜欢我的配置文件中的哪一行。 - Paul
7
这样做!只需从命令行运行httpd.exe,它会准确告诉您出了什么问题。我仍然困惑为什么XAMPP的控制面板没有提供错误输出。 - Nathan J.B.
2
非常好的回答。在我的情况下,问题是Skype服务监听了端口443,导致阻止了Apache,尽管我将Apache运行在端口80上! - DigiOz Multimedia
4
非常好的回答。在遇到很多障碍后,这为解决问题提供了路径 - 谢谢!同意 @NathanJ.Brauer 的看法,XAMPP没有中继/显示此错误信息是不幸和短视的。 - Manachi
1
七年后,你救了我的命。我也同意@NathanJ.Brauer的观点,CMD可以告诉你问题所在,而XAMPP的控制面板在这方面需要更新。记录一下,我正在使用Windows 10,XAMPP 3.2.2,错误信息是:D:/XAMPP/apache/conf/httpd.conf第39行语法错误:ServerRoot必须是有效的目录。 - DylRicho
显示剩余3条评论

22

解决这个问题的更好方法是在Apache2\conf\httpd.conf 中更改端口号。将端口号更改为:Listen 8888 和 ServerName machinename:8888 . 在更改端口号后重新启动Apache服务器。


6
不需要重新安装服务器,只需重新启动(实际上是启动,因为它一开始并没有运行)。此外,这只能解决在不介意在另一个端口上运行Apache的情况下的问题。 - Dave DuPlantis

5

我曾经遇到过同样的问题。我检查了netstat、其他运行的进程、防火墙并更改了httpd.conf,停止了杀毒软件,但是所有的努力都徒劳无功。:(

最终的解决方案是停止IIS。然后问题就得到了解决 :)

我猜想IIS和Apache不能同时工作。如果有人知道任何解决方法,请告诉我们。


1
请参考以下内容:http://stackoverflow.com/questions/431041/apache-xamp-and-iis-cant-work-together#431062 - gbjbaanb

4

按照Tim的建议,从命令行运行httpd.exe。 PostgreSQL的路径已更改,在端口80上没有运行任何其他内容,并且我在error.log文件中没有看到任何内容。

我克隆我的引导驱动器/分区,一旦设置基础,就不必花费三天安装和重新调整所有内容。 结果我重新安装了我的WAPP堆栈,并为PostgreSQL使用了非常特定的名称/版本。 除非您从命令行运行该命令,否则Windows不会返回特定的错误消息。


1
这是对我有效的方法。通过CMD命令行运行,我发现在vhosts.conf中有一个错误,只有在计算机重新启动时才会出现问题。在Windows中通过命令行运行,可以在“开始菜单>搜索框”中键入CMD,然后输入httpd.exe的路径。要发现httpd.exe的路径,一种方法是从“搜索框”中运行“服务”,找到Apache,右键单击它,然后复制“可执行文件的路径”。您可以通过右键单击将其粘贴到CMD中。 - liamvictor

3

按照以下步骤进行操作,它将正常运行。转到控制面板-->程序和功能-->点击打开或关闭Windows功能-->查看IIS是否已选中如果选中,请取消选中IIS并重新启动计算机。之后,打开服务查看Web Deployement Agent的服务状态,如果已启动,请停止它。同时查看WampAppache和WampSqlID的状态,如果未启动,请手动启动。这对我有用。


3
今天我也遇到了这个问题。事件查看器中的日志错误如下所示:Apache服务名报告以下错误:
1.包装器php-cgi.exe无法访问:(720005)拒绝访问。 2.apache服务监视器:请求的操作失败。
实际上,这是一个访问权限的问题。因此,下面的解决方案可以帮助我更改php-cgi.exe的安全属性:
- 不从父级继承权限... - 请添加everyone用户

2
如果同时运行Appache和IIS,则可能会挂起Apache服务。当我停止所有IIS网站一次,然后重新启动Apache服务时,它对我有用... Jai...

2

Windows Vista Home Premium操作系统问题:解决该问题的最简单方法是更改Apache2 \ conf \ httpd.conf中的端口号。

在以下几行中更改端口号。将“Listen”从80更改为8888,“ServerName”(例如:localhost)从80更改为8888。保存后关闭。打开Apache Service Monitor并重新启动服务,或者转到计算机管理>服务并查找Apache 2.2并启动或重新启动。


1
我遇到了同样的问题,在我的情况下,我需要在httpd.conf中添加模块。该文件不完整,关键字不正确(如LoadModule)。请打开命令行,进入C:\Apache24\bin目录。
在命令行中输入以下命令:C:\Apache24\bin> httpd.exe 错误的原因可以从上述命令的输出中得知。

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