如何在 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?的主要内容,如果未能解决你的问题,请参考以下文章

linux系统中怎样启动2个apache服务

大神教你如何解决Linux系统80端口被占用

nodejs如何检查哪个IP访问80端口

linux服务器80端口已经开启并且能连接80端口,但是不能访问服务器网页是啥原因

linux下怎么开启80端口

linux下怎么开启80端口