scp173
V2EX  ›  macOS

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

  •  
  •   scp173 · Jun 29, 2022 · 3396 views
    This topic created in 1599 days ago, the information mentioned may be changed or developed.

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

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

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

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

    1. 以当前用户启动:brew services start nginx
    lululau
    lululau
    Jun 29, 2022
    11
    2. 以 root 用户启动,并设置为开机自启动:sudo brew services start nginx
    lululau
    lululau
    Jun 29, 2022
    12
    用 Alfred 的,也可以用我弄的这个 workflow: https://github.com/lululau/homebrew-services-alfred-workflow
    scp173
    scp173
    OP
    Jun 29, 2022
    13
    @lululau 原来如此,我试了之后还以为权限改为限制在网卡上了,我原先也是认为权限是设置在 1024 一下端口上
    CEBBCAT
    CEBBCAT
    Jun 29, 2022
    14
    提问之前别忘了搜索
    https://stackoverflow.com/a/44032912
    scp173
    scp173
    OP
    Jun 29, 2022
    15
    @CEBBCAT 我和搜索的不一样哦,我是可以监听 80 不能监听指定网卡的 80
    scp173
    scp173
    OP
    Jun 30, 2022
    16
    哎,目前的做法是绑定了所有网卡的 80 端口,在 [系统偏好设置] - [安全性与隐私] - [防火墙] [防火墙选项] 里禁用 nginx 的外部网络连接,以此达到使用 80 端口且防止局域网访问
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   2059 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 34ms · UTC 06:29 · PVG 14:29 · LAX 22:29 · JFK 01:29
    ♥ Do have faith in what you're doing.