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

新手上路,请多包涵

我正在学习 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 的权限,但我不知道如何解决这个问题。非常感谢任何帮助!

原文由 olivier 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 330
2 个回答

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

在开发环境中运行时,您几乎可以自由地以 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";
  }
}

原文由 vesse 发布,翻译遵循 CC BY-SA 3.0 许可协议

授予对节点的根访问权限并在端口 80 上启动服务器,你可以这样做

sudo node app.js

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

原文由 DeveloperCoding 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题