Node.js 错误:侦听EACCES 0.0.0.0:443

Node.js 错误:侦听EACCES 0.0.0.0:443,node.js,express,Node.js,Express,我正试图在我的MacOS上运行NodeJS的web项目 在npm安装之后,npm启动返回一个错误 events.js:183 throw er; // Unhandled 'error' event ^ Error: listen EACCES 0.0.0.0:443 at Object._errnoException (util.js:1024:11) at _exceptionWithHostPort (util.js:1046:20) at Server.

我正试图在我的MacOS上运行NodeJS的web项目

npm安装
之后,
npm启动
返回一个错误

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

Error: listen EACCES 0.0.0.0:443
    at Object._errnoException (util.js:1024:11)
    at _exceptionWithHostPort (util.js:1046:20)
    at Server.setupListenHandle [as _listen2] (net.js:1334:19)
    at listenInCluster (net.js:1392:12)
    at Server.listen (net.js:1476:7)
    at Object.<anonymous> (/Users/softtimur/Startup/PRODSERVER/tmp/WeCard/models/www:36:8)
    at Module._compile (module.js:635:30)
    at Object.Module._extensions..js (module.js:646:10)
    at Module.load (module.js:554:32)
    at tryModuleLoad (module.js:497:12)
    at Function.Module._load (module.js:489:3)
    at Function.Module.runMain (module.js:676:10)
    at startup (bootstrap_node.js:187:16)
    at bootstrap_node.js:608:3

为了监听特权端口,您需要root权限来启动服务器;这适用于小于1024的端口。您可以将nginx用作在443上运行的反向代理服务器,并以非特权用户身份在非特权端口上运行节点JS服务器

有关在生产环境中使用nginx设置Node JS应用程序的更多信息,请访问以下链接:

我认为您可能希望为您的应用程序提供HTTPS,如果是这种情况,那么通常对于NodeJ,我们不直接从节点应用程序使用HTTPS。相反,我们使用nginx(一个web服务器)作为“反向代理”。这意味着nginx位于我们的应用程序前面,它为我们监听端口443,然后将请求发送到我们想要的应用程序

使用nginx,您可以监听端口443,然后根据主机名等重定向到多个不同的服务。例如,我可能有3个web服务在一台服务器上运行,使用nginx,我可以监听端口443上的任何HTTP连接。如果HTTP请求发送到主机myblog.com,它可以将其发送到侦听端口8081的节点服务。如果请求中的主机名是myresume.com,它可能会转到端口8082上的一个服务,myprivateothings.com可能会转到端口8083


使用类似nginx的东西(存在许多替代方案),您可以在一台服务器上使用SSL/TLS(https)管理多个服务。

最重要的是,不要以root用户身份运行。这需要“it”。不要以root用户身份运行节点web项目

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

// %user% is whatever user is running your code
sudo touch /etc/authbind/byport/443
sudo chown %user% /etc/authbind/byport/443
sudo chmod 755 /etc/authbind/byport/443
接下来,将此别名添加到
~/.bashrc
~/.bash\u配置文件中:

alias pm2='authbind --deep pm2'
然后,尝试pm2:

pm2 start app.js

在类UNIX系统中,非root用户无法绑定到低于1024的端口

当代理端口80上的地址时,这是一个麻烦。通常情况下,您最终会执行所有必须绑定到这些端口的应用程序

但是,从内核2.6.24开始,您可以使用
setcap
命令设置程序的特定功能

要启用所有节点程序在低于1024的任何端口上绑定,请发出以下命令:

sudo setcap'cap\u net\u bind\u service=+ep'/usr/local/bin/node
注意:如果您不知道
节点的位置,请执行以下命令

sudo setcap'cap\u net\u bind\u service=+ep'`哪个节点`

端口<1024具有特权。看这些:请看我的更新。但我有一个在443上运行的应用程序。然后你必须选择另一个端口。或者,如果应用程序是静态网页或网站,则可以切换到nginx并为这两个应用程序创建多个vhost配置,以在443上运行,但域名不同。注意:Nginx,因为它只能用作反向代理服务器。请注意%user%是所有应用程序文件的所有者的占位符。是的,我用正确的用户名替换了它。我仍然会收到EACCESS错误。@Jim-这里有关于PM2和authbind的更多信息:我不理解对这一点的垃圾邮件,因为这是许多nodejs项目在生产中的标准做法。谢谢分享!想了解有关
setcap
函数的更多信息,请参阅以下文章:
pm2 start app.js