错误:听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端口的访问权限,但我不知道如何解决这个问题。 任何帮助非常感谢!

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

在开发环境中运行时,你可以自由地以root身份运行,但在生产环境中相当危险。

下面是一个nginxconfiguration示例,它将查看请求是否针对文件系统中存在的文件,如果不是,请求将请求代理到在端口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端口上的服务器

 sudo node app.js 

这将启动服务器端口80的权限

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