[英]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.