【发布时间】:2014-09-02 12:02:28
【问题描述】:
当我为 apache 和 node 使用不同的工作区时,它们都可以正常工作。 但是,如果我想在“php 工作区”上使用节点,我就不能,因为 apache 始终处于启动状态并使用端口 8080,以及节点想要在其 env.PORT 上使用。
为什么我不能只关闭 php 工作区上的 apache? 你能给我一些创造性的方法让它发挥作用吗?
谢谢!!
【问题讨论】:
标签: php node.js apache cloud9-ide
当我为 apache 和 node 使用不同的工作区时,它们都可以正常工作。 但是,如果我想在“php 工作区”上使用节点,我就不能,因为 apache 始终处于启动状态并使用端口 8080,以及节点想要在其 env.PORT 上使用。
为什么我不能只关闭 php 工作区上的 apache? 你能给我一些创造性的方法让它发挥作用吗?
谢谢!!
【问题讨论】:
标签: php node.js apache cloud9-ide
如果您想在 PHP 工作区中停止 Apache 以改用 node,只需运行:
/etc/init.d/apache2 stop
端口将是免费的。
【讨论】:
您不能让两个服务都在一个端口上进行侦听。根据您想要投入的精力和解决方案所需的复杂程度,您可以做几件事:
1) 在端口8080 上保持“两者”:您可以通过让 Apache 在 8080 上侦听并在另一个端口中的节点说 8888 来模拟这一点,然后创建一个指向您 IP 的 VirtualHost(127.0.0.1 也可以)使用 name based vhosts,您可以让 a.mybox:8080 指向您的常规工作区,然后 b.mybox:8080 指向您的节点工作区。为此,您可以使用 Apache 的 ProxyPass and ProxyPassReverse 到您的节点正在侦听的 localhost:8888。
2) 您可以执行与上述相同的操作,但您可以使用 /node/ 来代替 NamedVhosts,再次使用 ProxyPass。
3) 最后,最简单和最快的解决方案是将节点放在另一个端口,比如 8888,然后转到那个端口。您可以将您正在侦听的端口指定为listen() 调用的参数:http://nodejs.org/api/net.html#net_server_listen_port_host_backlog_callback。
您还可以使用 Node 本身进行代理,或者使用另一个进程(如 nginx 或 haproxy)或许多节点模块之一(如 this one)。最后,将它保存在不同的端口会更容易,做所有其他配置可能不值得麻烦。
最后,如果您通过代理方式使用不同的虚拟主机,请记住,如果您没有完整的域,您可以在 /etc/hosts 中定义您的主机名称。同样,更容易。
希望对你有帮助。
【讨论】: