无法让 Nginx 在端口 80 上工作。在任何其他端口上都可以正常工作

无法让 Nginx 在端口 80 上工作。在任何其他端口上都可以正常工作

我刚刚在 Mac OS X 10.11(El Capitan)上设置了 Homebrew 的 Nginx。

如果我这样设置我的 Ngnix 配置:

listen      127.0.0.1:8080;

listen      127.0.0.1:81;

listen      127.0.0.1:75;

它会起作用。但如果我把这个放进去:

listen      127.0.0.1:80;

不会。如果我去,我的连接将被拒绝http://127.0.0.1

ps说 Nginx 正在运行,但是netstat -a | grep nginx或者netstat -a | grep 80说它没有运行。

当然,以 root 身份运行它(我不需要这样运行:8080

并且 Mac OS X 防火墙没有运行。

错误日志不再显示此内容:

2015/10/10 17:16:19 [emerg] 23906#0: bind() to 0.0.0.0:80 failed (48: Address already in use)

有什么想法吗?我可以在 上运行它8080(奇怪的是,当我在 上运行它时8080,它会打开80端口并将其重定向到80)。

答案1

重启 OSX。成功了。我认为 Linux 会有所不同。

答案2

错误如下:

2015/10/10 17:16:19 [emerg] 23906#0: bind() to 0.0.0.0:80 failed (48: Address already in use)

lsof“地址已被使用”说明了一切:您系统上的其他程序正在使用端口 80。您是否启用了 Web 共享,或者是否安装并运行了 Apache?您可以在系统上运行以下命令来检查这一点:

sudo lsof -i -P | grep -i "80"

这将严格显示哪些进程可能正在使用端口 80。如果您好奇想知道在 Mac OS X 系统上还有哪些其他端口设置为“监听”,只需运行以下命令:

sudo lsof -i -P

如果您只想检查端口 80 是否正在使用,您可以使用此命令的变体lsof来检查这些内容而无需使用以下命令过滤输出grep

sudo lsof -nPL -iTCP:80

答案3

在基于 Unix 的系统(如 MacOS)上,如果没有超级用户权限,您无法在 1024 以下的端口上运行服务。但是,当您重新启动计算机时,nginx 服务会以超级用户身份自动重新启动,因此它可以正常工作。

以下命令应该可以解决该问题:

sudo brew services restart nginx

答案4

我解决了这个问题(我有带 M1 芯片的 MacBook Air):

  1. 删除 httpd(如果有)
  2. 禁用 Apache关联
  3. 安装 nginx
  4. 将端口更改为 80/usr/local/etc/nginx/nginx.conf

相关内容