我刚刚在 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):
- 删除 httpd(如果有)
- 禁用 Apache关联
- 安装 nginx
- 将端口更改为 80
/usr/local/etc/nginx/nginx.conf