在AWS上的同一实例上运行node.js和PHP / apache

时间:2016-06-24 12:47:37

标签: php node.js amazon-ec2 iptables

我已成功在Ec2上安装了节点js,我的网站和域运行正常,但是当我尝试运行节点js时,它将无法运行。

我已经按照一些教程进行了操作,并且已经完成了以下步骤。

 1. I have added a port 9000 on my security group
 2. I have done the pre-routing on iptables using below command

    sudo iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 9000

但是在运行上面的代码之后,我的域名停止运行意味着当我尝试打开我的网站时mydomain.com它什么也没有显示,如果我删除该规则而不是它的工作。

我也尝试过以下解决方案,以root身份运行节点来监听80上的端口。

sudo node server.js

但之后我收到了错误

Error: listen EADDRINUSE :::80
    at Object.exports._errnoException (util.js:949:11)
    at exports._exceptionWithHostPort (util.js:972:20)
    at Server._listen2 (net.js:1253:14)
    at listen (net.js:1289:10)
    at Server.listen (net.js:1385:5)
    at Object.<anonymous> (/home/mcook/domains/development.mcook.co.in/public_html/server.js:36:5)
    at Module._compile (module.js:541:32)
    at Object.Module._extensions..js (module.js:550:10)
    at Module.load (module.js:456:32)
    at tryModuleLoad (module.js:415:12)

我只想让我的节点和我的网站都必须运行,并且我需要运行哪个命令和端口。

1 个答案:

答案 0 :(得分:1)

按照命令将 PORT 80 的所有流量转发至 PORT 9000

sudo iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 9000

你为什么这样做?由于您已经从AWS安全组中打开了 PORT 9000 ,因此您可以将 node.js 直接连接到 PORT 9000 来自代码。

您在执行上述代码后看到空白页的原因是您的Web服务器在PORT 80上运行,并且每个请求都转发到端口9000上的node.js服务器,而这些请求实际上没有任何要显示的内容。

因此,不要在命令上运行,只需在PORT 9000上运行node.js服务器,并仅从客户端连接到PORT 9000。