brew 安装的 nginx 怎么绑定到 127.0.0.1 的 80 端口

2022-06-29 10:23:07 +08:00
 scp173

我需要启动(使用 brew 安装的) nginx 的 80 端口,但是不希望被局域网访问,系统是 macOS Monterey 12.4

这种配置可以启动

    server {
        listen       0.0.0.0:80;
        ...
    }

这种配置就不行

    server {
        listen       127.0.0.1:80;
        ...
    }

报错内容

bind() to 127.0.0.1:80 failed (13: Permission denied)
1993 次点击
所在节点    macOS
16 条回复
lscho
2022-06-29 10:38:42 +08:00
Permission denied 是权限不够,把 nginx 的用户加一下 root 权限,或者把 nginx 的用户改为自己,然后 sudo 启动试试
xtinput
2022-06-29 10:42:18 +08:00
上虚拟机呀
xtinput
2022-06-29 10:43:19 +08:00
直接在主机上部署服务器环境不好,可能会出现端口冲突
xtinput
2022-06-29 10:48:41 +08:00
https://github.com/gyf304/vmcli 直接用系统的虚拟机框架,没 GUI 的
PerFectTime
2022-06-29 10:54:21 +08:00
sudo nginx
scp173
2022-06-29 11:31:41 +08:00
@xtinput 我只想起一个 http 的服务,端口在 80 而已,没必要虚拟机吧,就算端口冲突最坏的情况就修改端口咯
scp173
2022-06-29 11:36:52 +08:00
@lscho @PerFectTime 试了一下,用 sudo 可以正常工作

但是为什么 0.0.0.0 的不会有权限问题呢
mww
2022-06-29 11:37:06 +08:00
好像低于 1024 端口就需要 root 权限,最简单的方法就是端口转发
lscho
2022-06-29 11:42:49 +08:00
@scp173 0.0.0.0 的意思就是不指定任何地址,所以没有权限问题
lululau
2022-06-29 11:46:59 +08:00
把 1024 以下端口规定为受限端口其实是一个糟糕的设计,macOS 10.13 之后就没有受限端口这个机制了,只不过它的实现看起来有 bug ,这就是为什么绑到某个具体接口的时候仍然报 Perm denied:

https://news.ycombinator.com/item?id=18302380

brew 安装的服务可以用 brew services 启动:

1. 以当前用户启动:brew services start nginx
lululau
2022-06-29 11:47:36 +08:00
2. 以 root 用户启动,并设置为开机自启动:sudo brew services start nginx
lululau
2022-06-29 11:56:53 +08:00
用 Alfred 的,也可以用我弄的这个 workflow: https://github.com/lululau/homebrew-services-alfred-workflow
scp173
2022-06-29 11:59:53 +08:00
@lululau 原来如此,我试了之后还以为权限改为限制在网卡上了,我原先也是认为权限是设置在 1024 一下端口上
CEBBCAT
2022-06-29 12:26:37 +08:00
提问之前别忘了搜索
https://stackoverflow.com/a/44032912
scp173
2022-06-29 12:31:26 +08:00
@CEBBCAT 我和搜索的不一样哦,我是可以监听 80 不能监听指定网卡的 80
scp173
2022-06-30 11:52:27 +08:00
哎,目前的做法是绑定了所有网卡的 80 端口,在 [系统偏好设置] - [安全性与隐私] - [防火墙] [防火墙选项] 里禁用 nginx 的外部网络连接,以此达到使用 80 端口且防止局域网访问

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/862856

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX