在Mac OS X 10.9 Mavericks上,Nginx启动失败。

30

我使用nginx已经几个月了,一直没有问题,但是在升级到Mac OS X 10.9 Mavericks之后,当我尝试启动nginx时,出现了以下错误:

nginx: [emerg] bind() to 0.0.0.0:80 failed (48: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:80 failed (48: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:80 failed (48: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:80 failed (48: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:80 failed (48: Address already in use)
nginx: [emerg] still could not bind()

我试图按照这些说明进行操作,但我的输出结果似乎有些不同,我运气并不是很好。

以下是输出结果:

ps ax -o pid,ppid,%cpu,vsz,wchan,command|egrep '(nginx|PID)'

是:

  PID  PPID  %CPU      VSZ WCHAN  COMMAND
 15015 12765  0.0  2432784 -      egrep (nginx|PID)

我尝试使用该PID杀死该进程,但它似乎永远不会停止... 有任何想法如何让nginx再次运行吗? 非常感谢任何帮助!!


1
尝试查看哪个进程正在监听80端口,也许您安装了Apache或类似的软件。 - Mohammad AbuShady
我也遇到了“bind() to 0.0.0.0:80 failed (13: Permission denied)”的问题。如果我将端口更改为8000,它就不会给我拒绝许可。 - Adi
1
如果(像我一样)Nginx启动良好,但您的日志仍然不断出现此错误,则可能存在其他解决方案:http://serverfault.com/a/548741/23206 - Garrett Albright
1
那不是nginx进程,那是运行该命令的终端。 :) - Eric Keyte
1
@Adi 要绑定到低于1024的端口,必须以管理员身份运行。 - Joseph Lennox
显示剩余2条评论
3个回答

61

你的ps ... | egrep命令找到的是它自己,而不是nginx的实例(看一下"COMMAND"列)。由于端口80正在使用中,很可能是某个其他程序在运行并占用了它。要找出原因,请执行以下命令:

sudo lsof -i:80

如果是Apache ("httpd") 程序,您可以使用以下命令关闭它:

sudo launchctl unload -w /System/Library/LaunchDaemons/org.apache.httpd.plist

如果那样做还不行,就需要更多信息来找出是什么占用了80端口,以及它是如何启动的。


2
对于那些使用谷歌搜索的人,四年后仍然有效。 - MeanMatt
3
6年过去了,仍然很强大。 - Christian Young
1
7年了,仍然可以工作。问题是,如果我关闭httpd,会有什么不良影响吗? - Just a coder
1
@Justacoder 没有问题,除非你正在用它做某些事情。 - Gordon Davisson
我运行了 sudo lsof -i:80 命令,并通过运行 kill -9 <插入PID> 找到了需要终止的进程。然后,我成功地使用 sudo nginx 启动了nginx。 - allieferr
9年依然有效。 - Zuckjet

6

可能仍在运行并监听端口80的是nginx。尝试使用以下命令:

sudo killall nginx

0
我首先尝试了下面的命令,以查看哪个应用程序正在使用80端口。
sudo lsof -i -n -P | grep TCP

com.docke 1985 KOMP 25u IPv6 0x4e18b4b0735f4091 0t0 TCP *:30299 (LISTEN) com.docke 1985 KOMP 33u IPv6 0x4e18b4b0735f21f1 0t0 TCP *:80 (LISTEN) com.docke 1985 KOMP 43u IPv4 0x4e18b4b06bb5d721 0t0 TCP 127.0.0.1:6443 (LISTEN) com.docke 43889 KOMP 8u IPv4 0x4e18b4b06b933d41 0t0 TCP 127.0.0.1:63347 (LISTEN) node 85239 KOMP 29u IPv4 0x4e18b4b0954cbea1 0t0 TCP 127.0.0.1:4200 (LISTEN)

在上面的结果中看到了下面的条目,并停止了 Docker。

com.docke 1985 KOMP 33u IPv6 0x4e18b4b0735f21f1 0t0
TCP *:80 (LISTEN)

我尝试了以下两个命令。

sudo killall nginx

sudo nginx

我的应用程序开始工作,并从我的nginx.conf文件中选择80端口。


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