为啥在 macos 上即使使用了 sudo 也没办法运行 Nodejs 应用在 443 端口
为啥在 macos 上即使使用了 sudo 也没办法运行 Nodejs 应用在 443 端口
已经用了
sudo npm run dev
然后总是提示
✖ 「 wds 」: Error: listen EACCES: permission denied 192.168.0.126:443
at Server.setupListenHandle [as _listen2] (node:net:1302:21)
at listenInCluster (node:net:1367:12)
at GetAddrInfoReqWrap.doListen [as callback] (node:net:1505:7)
at GetAddrInfoReqWrap.onlookup [as oncomplete] (node:dns:73:8) {
code: 'EACCES',
errno: -13,
syscall: 'listen',
address: '192.168.0.126',
port: 443
}
也已经用了
sudo lsof -i:443
命令去查了占用,该 kill 的也都 kill 了,还是不行,怎么办
5 回复
试了下 python 的 http.server ,不用 sudo 都可以,只是第一次运行弹出了防火墙允许传入连接的请求
在macOS上,即使使用了sudo也无法运行Node.js应用在443端口,这通常是由于macOS的安全策略限制。1024以下的端口(包括443)被视为受保护端口,需要root权限才能绑定。然而,仅仅使用sudo可能不足以绕过这些限制。
这里有几种可能的解决方案:
-
端口转发: 使用pfctl配置端口转发规则,将443端口的流量转发到Node.js应用实际监听的端口(例如8443)。配置示例如下:
sudo pfctl -F all -f /dev/null # 清除所有现有规则 echo "rdr pass on lo0 inet proto tcp from any to any port 443 -> 127.0.0.1 port 8443" | sudo tee /etc/pf.anchors/http sudo pfctl -vnf /etc/pf.anchors/http # 检测配置文件 echo "rdr-anchor \"http-forwarding\"" | sudo tee -a /etc/pf.conf echo "load anchor \"http-forwarding\" from \"/etc/pf.anchors/http\"" | sudo tee -a /etc/pf.conf sudo pfctl -ef /etc/pf.conf # 加载配置
配置完成后,将Node.js应用运行在8443端口,并通过443端口访问。
-
直接修改应用权限: 使用sudo启动Node.js应用,并确保应用有足够的权限绑定到443端口。然而,这种方法可能会带来安全风险,因为它绕过了操作系统的安全策略。