我正在关注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的访问权限,但我不知道如何解决这个问题。 任何帮助非常感谢!
答案 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
// %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
应该将其转发给端口,至少对我有用