[英]Error: listen EACCES 0.0.0.0:444 node.js while listening on port 444/443
[英]Error: listen 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 身份运行(即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";
}
}
授予对节点的 root 访问权限并在端口 80 上启动服务器,您可以这样做
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
// %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 设置为在端口 8080 上侦听 HTTP 和 8443 上侦听 HTTPS 来解决此问题。 它真的不喜欢使用那些较低数量的端口。 此外,我安装并运行了 IIS,因此那里也可能存在某种端口冲突。
有
须藤 ufw 允许 80/tcp
它应该是端口转发的,至少对我有用
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.