28

我已经使用 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 再次运行的任何想法?任何帮助是极大的赞赏!!

4

3 回答 3

58

您的ps ... | egrep命令正在寻找自己,而不是 nginx 的实例(查看“COMMAND”列)。由于端口 80 正在使用中,很可能有其他程序(可能是操作系统附带的 Apache?)正在运行并获取它。要找出答案,请运行:

sudo lsof -i:80

如果它是系统 Apache(“httpd”)程序,您可以使用以下命令将其关闭:

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

如果还不行,则需要更多信息来弄清楚是什么在占用端口 80 以及它是如何开始的。

于 2013-11-01T14:32:39.280 回答
6

可能仍在运行 nginx 并在端口 80 上侦听。试试这个命令

sudo killall nginx
于 2016-06-27T19:57:29.810 回答
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)

在上述结果中看到以下条目。并停止了码头工人。

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

并尝试了以下两个命令。

sudo killall nginx

sudo nginx

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

于 2020-04-12T05:12:01.870 回答