错误:侦听EACCES 0.0.0.0:80 OSx Node.js

时间:2016-01-28 18:01:26

标签: javascript node.js macos

我正在关注angularJS书中的教程并且必须设置服务器。这是server.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的访问权限,但我不知道如何解决这个问题。 任何帮助非常感谢!

5 个答案:

答案 0 :(得分:50)

如果需要在端口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";
  }
}

答案 1 :(得分:47)

提供对节点的root访问权限并在端口80上启动服务器 你可以做到

sudo node app.js

这将启动服务器授予端口80

的权限

答案 2 :(得分:10)

最重要的是,不要以root身份运行。这就是要求'它'。 “它”非常糟糕。去看看the movie。然后,不要以root用户身份运行节点Web项目。

// DO NOT DO THIS!
$ sudo node app.js

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

相反,请使用PM2authbind执行此操作:

// %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

答案 3 :(得分:1)

在Windows上,我通过将Express设置为侦听端口8080上的HTTP和8443上的HTTPS来修复此问题。它真的不喜欢使用那些较低数量的端口。我也安装了IIS并运行,因此也可能存在某种端口冲突。

答案 4 :(得分:0)

sudo ufw允许80 / tcp

应该将其转发给端口,至少对我有用