我正在尝试使用以下命令在 Mac OS X 上启动 nginxsudo nginx
失败并出现以下错误
nginx: [emerg] bind() to 0.0.0.0:8080 failed (48: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:8080 failed (48: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:8080 failed (48: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:8080 failed (48: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:8080 failed (48: Address already in use)
nginx: [emerg] still could not bind()
我尝试使用以下方法停止 Apache 服务sudo apachectl stop
这会引发以下错误
launchctl: Error unloading: org.apache.httpd
根据这个答案这很可能意味着 Apache 尚未运行
然后我尝试使用以下代码找出 80 端口上运行的程序sudo lsof -i:80
这输出到这个
Google 441 jaskaran 68u IPv4 0xa3f4d891ed1a8373 0t0 TCP 192.168.1.45:50993->www.google:http (ESTABLISHED)
Google 441 jaskaran 143u IPv4 0xa3f4d891ed054b5b 0t0 TCP 192.168.1.45:51017->www.scorecardresearch.com:http (ESTABLISHED)
Google 441 jaskaran 150u IPv4 0xa3f4d891eb9a1b5b 0t0 TCP 192.168.1.45:51018->www.scorecardresearch.com:http (ESTABLISHED)
Google 441 jaskaran 152u IPv4 0xa3f4d891ed1a4373 0t0 TCP 192.168.1.45:51019->www.scorecardresearch.com:http (ESTABLISHED)
Google 441 jaskaran 156u IPv4 0xa3f4d891ed071b5b 0t0 TCP 192.168.1.45:51020->www.scorecardresearch.com:http (ESTABLISHED)
该命令的输出随着时间不断变化。
我如何让 nginx 工作?
答案1
在尝试启动之前nginx
,请检查端口“8080”上是否已在运行,如下所示。我说端口“8080”,因为这是您发布的错误消息中显示的端口号:
$ sudo netstat -nlp | grep ':8080' tcp 0 0 0.0.0.0:8080 0.0.0.0:* LISTEN 2355/nginx
tcp6 0 0 :::8080 :::* LISTEN 2355/nginx
在我的例子中,它显示了一个名为“nginx”的进程,其进程 ID 为 2355,在端口 8080 上运行。
您可以尝试kill -TERM 2355
向相关进程 ID 发出 以停止(假设您不想让它运行),然后使用 确认netstat
,如上所示。将“2355”更改为与您自己的进程 ID 匹配。
您可以仍然即使在尝试启动之前确认该部分没有运行任何内容,也会收到错误。nginx
在这种情况下,您的 Nginx 可能有与该端口相关的冲突条目。在您的 Nginx 配置中搜索8080
。如果有多个提及,请查看相关配置的文档以确认您没有使用它太多次。