如何在 linux 服务器的 80 端口上启动 node.js?
Posted
技术标签:
【中文标题】如何在 linux 服务器的 80 端口上启动 node.js?【英文标题】:How to start node.js on port 80 on a linux server? 【发布时间】:2013-09-13 06:23:25 【问题描述】:当我尝试在端口 80 上启动节点时,错误告诉我该端口正在使用中。我想那是 Apache。
“接管”端口 80 并在服务器重启后保持这种状态的正确方法是什么?
(Linux xxxx.__.com 2.6.32-5-amd64 #1 SMP Tue Jun 14 09:42:28 UTC 2011 x86_64 GNU/Linux)
【问题讨论】:
【参考方案1】:您可以使用 ip 表将端口 80 映射到 8000
iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8000
使其永久化
sudo sh -c "iptables-save > /etc/iptables.rules"
并添加
pre-up iptables-restore < /etc/iptables.rules
到你的 /etc/network/interfaces
【讨论】:
你能解释一下最后两个命令发生了什么吗?重启后,我似乎无法从浏览器连接到服务器 它会在重新启动时恢复 iptable 规则,否则 iptables 规则将持续到您重新启动服务器为止。让你的节点应用监听 8000 端口。 以这种方式更改 iptables 是否会导致无法通过 ssh 连接到服务器?我已经完成了,通过 /sbin/reboot 重新启动,现在服务器出现死机 - 连接超时 是的,如果您错误地配置了 /etc/network/interface 文件,该接口将不会再次出现。用 ifdown eth0 && ifup eth0 测试它,这样你就不会把自己锁在外面了。 我已经添加了接口文件的前置行。重新启动,服务器启动正常。再次重启,死机。与 iptables 无关的服务器问题?【参考方案2】:要在另一个进程正在侦听端口 80 时接管它,您必须终止该进程(或以某种方式告诉它停止侦听)。为确保 Apache 在下次启动时不再尝试监听 80 端口,您需要编辑其配置或阻止其启动。
要查看哪个进程正在侦听端口 80,请运行 sudo netstat -ntap
并查找以端口 :80
结尾的 Local Address
行。进程的 PID(和名称)在最右边的列中。
【讨论】:
【参考方案3】:你可以使用 node.js 和 node-http-proxy 检查这个链接How to use vhosts alongside node-http-proxy? 和 How do I run Node.js on port 80?
感谢和问候, 阿洛克
【讨论】:
【参考方案4】:不断运行未使用的 apache 可能是一个安全漏洞,无论如何运行未使用的服务毫无意义。
如果你在 ubuntu 上,这就是我用的..
sudo service apache2 stop
sudo update-rc.d apache2 remove
【讨论】:
【参考方案5】:停止当前使用的服务后,即可访问80端口。
根据您的情况,请按照以下步骤操作:
1) 使用systemctl
停止apache2:
sudo systemctl stop apache2
2) 检查 apache2 状态:
sudo systemctl status apache2
或者只需在浏览器中输入http://localhost
。如果你得到一个错误,你很高兴。
ERR_CONNECTION_REFUSED
3) 现在在端口 80 上启动你的 NodeJS 服务器。
4) 您可以通过http://localhost
访问您的服务器
更新
如果您在控制台上看到错误,请尝试在 node
前面加上 sudo
例如。 sudo node server.js
这里是错误
events.js:137
throw er; // Unhandled 'error' event
^
Error: listen EACCES 0.0.0.0:80
at Object._errnoException (util.js:1003:13)
at _exceptionWithHostPort (util.js:1024:20)
at Server.setupListenHandle [as _listen2] (net.js:1349:19)
at listenInCluster (net.js:1407:12)
at Server.listen (net.js:1495:7)
at Object.<anonymous> (/home/abdus/Desktop/voice-recognition/test.js:7:4)
at Module._compile (module.js:660:30)
at Object.Module._extensions..js (module.js:671:10)
at Module.load (module.js:573:32)
at tryModuleLoad (module.js:513:12)
【讨论】:
以上是关于如何在 linux 服务器的 80 端口上启动 node.js?的主要内容,如果未能解决你的问题,请参考以下文章