kik*_*x78 4 webapp-development nodejs
我一直在尝试在端口 443 上运行节点 Web 应用程序,但我收到此输出错误:listen EACCES 0.0.0.0:443
已经尝试过 ufw allow 443/tcp 但 nmap 仍然没有将 443 显示为开放端口。
也试过 sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT 没有成功。
任何帮助将不胜感激。
谢谢@exore,我解决了这个问题
须藤 setcap 'cap_net_bind_service=+ep' $(readlink -f $(which node))
我相信问题是手动安装 node.js。它是 Ubuntu 上一个版本的默认设置,但我不知道这一点,我通过终端再次安装了它。
你可以去这里进行整个讨论。
https://gist.github.com/firstdoit/6389682
问候,
EACCES 意味着禁止侦听端口 443。这是因为您没有将应用程序运行为root. 1024以下的端口是保留端口,只有root它们可以使用。
尝试更改防火墙规则不会产生任何效果,因为防火墙会让数据包通过或阻止它们。他们不允许某人监听任何特定端口。
解决方案:运行您的代码sudo,但这可能存在安全风险。因此,您的应用程序应该在成功监听后尽快切换到另一个用户(或找到一些我不知道的其他机制来放弃权限)。
由于这很复杂,一个好的解决方案是
loopback非特权端口上的接口,例如127.0.0.1:104430:443请求127.0.0.1:10443。我想到的是 nginx,但许多其他服务器也可用于此任务。只需选择您最喜欢的一款即可。如果您希望在端口 443 上使用 SSL(通常是这种情况),您还应该设置证书(创建一个自签名证书或购买一个或更好,从 Let's Encrypt 获取免费证书)、配置协议、可用密码等。 .这个也复杂。
需要改进并且应该可以工作的最小 nginx 配置文件示例(现在无法测试):
server {
server_name me.example.com;
listen 0.0.0.0:443 ssl;
ssl_certificate /etc/mycerts/fullchain.pem;
ssl_certificate_key /etc/mycerts/privkey.pem;
ssl_session_timeout 30m;
ssl_session_cache shared:SSL:400k;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
server_tokens off;
charset utf-8;
location / {
proxy_pass http://127.0.0.1:10443/;
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
15811 次 |
| 最近记录: |