错误:侦听 EACCES 0.0.0.0:80 OSx 节点.js

Error: listen EACCES 0.0.0.0:80 OSx Node.js

本文关键字:节点 js OSx 错误 侦听 EACCES      更新时间:2023-09-26

我正在按照 angularJS 书中的教程进行操作,必须设置一个服务器。这是服务器.js文件:

 var express = require('express');
  var app = express();
   app.use('/', express.static('./'));
    app.listen(80);

我收到此错误:

$ node server.js
events.js:154
      throw er; // Unhandled 'error' event
      ^
Error: listen EACCES 0.0.0.0:80

我已经知道,错误 EACCES 意味着我没有对端口 80 的访问权限,但我不知道如何解决这个问题。任何帮助非常感谢!

如果您需要在端口 80 上运行服务器,您应该使用反向代理(如 nginx),该代理将使用特权端口上的系统帐户运行,并将请求代理到在非特权端口上运行的 Node.js 服务器 (> 1024)。

在开发环境中运行时,您几乎可以自由地以 root 身份运行(即。 sudo node server.js),但这在生产环境中是相当危险的。

这是一个示例nginx配置,它将查看请求是否针对文件系统中存在的文件,如果不是,则将请求代理到在端口9000上运行的Node.js服务器

upstream yournodeapp {
  server localhost:9000 fail_timeout=0;
  keepalive 60;
}
server {
  server_name localhost;
  listen 80 default_server;
  # Serve static assets from this folder
  root /home/user/project/public;
  location / {
    try_files $uri @yournodeapp;
  }
  location @yournodeapp {
    proxy_pass http://yournodeapp;
    proxy_set_header Host $host;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
  }
}

授予对端口 80 上的节点和启动服务器的 root 访问权限你可以做

sudo node app.js

这将启动服务器在端口 80 上授予权限

最重要的是,不要以 root 身份运行。这是在要求"它"。"它"真的很糟糕。去看电影。然后,不要以 root 身份运行节点 Web 项目。

// DO NOT DO THIS!
$ sudo node app.js
// DO NOT DO THIS EITHER!
$ sudo su -
# node app.js

相反,请使用 PM2 和身份验证来执行此操作:

// %user% is whatever user is running your code
sudo touch /etc/authbind/byport/80
sudo chown %user% /etc/authbind/byport/80
sudo chmod 755 /etc/authbind/byport/80

接下来,将此别名添加到您的~/.bash_aliases~/.bashrc~/.bash_profile

alias pm2='authbind --deep pm2'

然后,尝试使用 pm2:

pm2 start app.js

在Windows上,我通过将Express设置为侦听HTTP的端口8080和HTTPS的8443来解决此问题。 它真的不喜欢使用那些编号较低的端口。此外,我已经安装并运行了IIS,因此那里也可能是某种端口冲突。

须藤UFW允许80/TCP

它应该是端口转发的,至少对我有用