V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
scp173
V2EX  ›  macOS

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

  •  
  •   scp173 · 2022-06-29 10:23:07 +08:00 · 1964 次点击
    这是一个创建于 880 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    但是为什么 0.0.0.0 的不会有权限问题呢
    mww
        8
    mww  
       2022-06-29 11:37:06 +08:00
    好像低于 1024 端口就需要 root 权限,最简单的方法就是端口转发
    lscho
        9
    lscho  
       2022-06-29 11:42:49 +08:00
    @scp173 0.0.0.0 的意思就是不指定任何地址,所以没有权限问题
    lululau
        10
    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
        11
    lululau  
       2022-06-29 11:47:36 +08:00
    2. 以 root 用户启动,并设置为开机自启动:sudo brew services start nginx
    lululau
        12
    lululau  
       2022-06-29 11:56:53 +08:00
    用 Alfred 的,也可以用我弄的这个 workflow: https://github.com/lululau/homebrew-services-alfred-workflow
    scp173
        13
    scp173  
    OP
       2022-06-29 11:59:53 +08:00
    @lululau 原来如此,我试了之后还以为权限改为限制在网卡上了,我原先也是认为权限是设置在 1024 一下端口上
    CEBBCAT
        14
    CEBBCAT  
       2022-06-29 12:26:37 +08:00
    提问之前别忘了搜索
    https://stackoverflow.com/a/44032912
    scp173
        15
    scp173  
    OP
       2022-06-29 12:31:26 +08:00
    @CEBBCAT 我和搜索的不一样哦,我是可以监听 80 不能监听指定网卡的 80
    scp173
        16
    scp173  
    OP
       2022-06-30 11:52:27 +08:00
    哎,目前的做法是绑定了所有网卡的 80 端口,在 [系统偏好设置] - [安全性与隐私] - [防火墙] [防火墙选项] 里禁用 nginx 的外部网络连接,以此达到使用 80 端口且防止局域网访问
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2100 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 36ms · UTC 16:14 · PVG 00:14 · LAX 08:14 · JFK 11:14
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.