You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

树莓派4B运行Express.js监听80端口遇EACCES权限拒绝问题

解决Express.js在树莓派4 Model B上启动时的EACCES权限错误

你遇到的错误信息如下:

events.js:291
  throw er; // Unhandled 'error' event
  ^

Error: listen EACCES: permission denied 0.0.0.0:80
    at Server.setupListenHandle [as _listen2] (net.js:1293:21)
    at listenInCluster (net.js:1358:12)
    at Server.listen (net.js:1444:7)
    at Function.listen (/home/malinapi/Documents/node_modules/express/lib/application.js:635:24)
    at Object.<anonymous> (/home/malinapi/Documents/app.js:9:5)
    at Module._compile (internal/modules/cjs/loader.js:999:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:1027:10)
    at Module.load (internal/modules/cjs/loader.js:863:32)
    at Function.Module._load (internal/modules/cjs/loader.js:708:14)
    at Function.executeUserEntryPoint [as runMain] (internal/process/run_main.js:60:12)
Emitted 'error' event on Server instance at:
    at emitErrorNT (net.js:1337:8)
    at processTicksAndRejections (internal/process/task_queues.js:84:21) {
  code: 'EACCES',
  errno: 'EACCES',
  syscall: 'listen',
  address: '0.0.0.0',
  port: 80
}

问题原因

端口80属于Linux系统的特权端口(端口号小于1024的端口都需要root权限才能绑定),当前普通用户没有权限让Express应用绑定该端口,因此触发权限拒绝错误。

解决方案

1. 临时用sudo运行应用(不推荐)

直接以root权限启动应用,快速解决但存在安全隐患:

sudo node app.js

2. 修改应用监听非特权端口

将Express应用的监听端口改为1024以上的端口(如3000),修改app.js中的代码:

app.listen(3000, '0.0.0.0', () => {
  console.log('应用运行在http://0.0.0.0:3000');
});

启动后访问http://你的树莓派IP地址:3000即可。

3. 给Node.js赋予绑定特权端口的权限

使用setcap命令给Node.js二进制文件添加网络绑定权限,这样普通用户也能让应用监听80端口:

# 先确认Node.js的安装路径
which node
# 执行setcap命令(替换路径为实际输出结果)
sudo setcap cap_net_bind_service=+ep /usr/bin/node

如果是用nvm安装的Node.js,路径类似~/.nvm/versions/node/v18.17.0/bin/node,替换成实际路径即可。

4. 配置Nginx反向代理(生产环境推荐)

通过Nginx监听80端口,将请求转发到Express应用的非特权端口(如3000),既安全又便于管理:

  1. 安装Nginx:
sudo apt update && sudo apt install nginx
  1. 创建应用配置文件:
sudo nano /etc/nginx/sites-available/express-app

写入以下内容(替换你的树莓派IP或域名和3000为实际值):

server {
    listen 80;
    server_name 你的树莓派IP或域名;

    location / {
        proxy_pass http://localhost:3000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}
  1. 启用配置并重启Nginx:
sudo ln -s /etc/nginx/sites-available/express-app /etc/nginx/sites-enabled/
sudo nginx -t # 检查配置是否正确
sudo systemctl restart nginx

之后启动Express应用监听3000端口,用户访问80端口时Nginx会自动转发请求到应用。

内容的提问来源于stack exchange,提问作者Olex7iMatix

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 15:24:40