如何在 Linux 服务器上使用端口 80 启动 Node.js?

4
当我尝试在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)
5个回答

11

您可以使用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文件中


你能解释一下最后两个命令在做什么吗?重启后,我似乎无法从浏览器连接到服务器。 - dsp_099
更改iptables的方式是否会使通过ssh连接到服务器变得不可能?我已经这样做了,通过/sbin/reboot重新启动,现在服务器似乎已经死机 - 连接超时。 - dsp_099
1
如果您配置不正确/etc/network/interface文件,则接口将无法再次启动。使用ifdown eth0 && ifup eth0进行测试,以便您不会被锁定在外面。 - supernova
我已经添加了接口文件的预启动行。重启后,服务器正常启动。再次重启后,服务器无法启动。服务器问题与iptables无关? - dsp_099
如果重启后仍然正常工作,那么接口文件应该没问题,否则服务器在第一次重启后就会无响应。 - supernova
显示剩余2条评论

2
要想在另一个进程正在监听端口80时接管该端口,您必须杀死该进程(或以某种方式告诉它停止监听)。为确保Apache下次启动时不再尝试监听端口80,您需要编辑其配置文件或防止其启动。
要查看哪个进程正在监听端口80,请运行“sudo netstat -ntap”命令,并查找以端口“: 80”结尾的“本地地址”行。 PID进程(和名称)位于最右列中。

1

一旦停止当前使用端口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)

使用NGINX反向代理将是一个更好的选择,依我之见。 - Kushagra Kumar

1
一个一直运行但未被使用的apache可能会成为安全隐患,在任何情况下,运行未使用的服务都没有意义。
如果你正在使用Ubuntu系统,这是我所使用的方法...
sudo service apache2 stop
sudo update-rc.d apache2 remove

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接