在子文件夹或AWS

时间:2015-12-19 07:48:54

标签: php node.js amazon-web-services heroku

如何配置Heroku或AWS,以便我在子文件夹中运行带有Node.js应用程序的PHP应用程序?

我想实现这个目标:

web/app.php       <-- PHP entry point (Symfony front controller)
web/proxy/        <-- Node.js entry point
app.js            <-- Node.js app

我的Node.js应用将是此网络代理:https://github.com/nfriedly/node-unblocker

我已经尝试过这个Heroku buildpack https://github.com/dzuelke/heroku-multipack-nodejs-php-example,但这似乎只是使用Node.js来安装Bower依赖项而不是创建Node.js服务器。

我想要的设置是否可行或是否有更好的解决方案?我需要PHP应用程序和Node.js Web代理在同一个域上运行。

更新

感谢@mbaird的建议,我现在开始更多地了解这一点,经过一些谷歌搜索后,我设法使用Apache代理在本地工作,如下所示:

<Location "/proxy">
    ProxyPass http://localhost:8080/proxy
    ProxyPassReverse http://localhost:8080/proxy
</Location>

端口8080是我的本地Node.js服务器正在侦听的地方。

但是,我已经阅读了有关此解决方案的混合评论。 For example:&#34;这个解决方案远非最优。通过Apache进入的每个请求都会导致Apache线程等待/阻塞,直到从Node.js进程返回响应为止。&#34;

iaincollins建议使用&#34; HA Proxy或Varnish将不同的路径传递到不同的服务器&#34;。我想知道这是否确实更好,那么AWS或Heroku的最佳解决方案可能是使用CloudFront Path Pattern来指导不同来源的不同路径。

这听起来像是一个更好的解决方案吗?

关于ElasticBeanstalk,这不仅仅是包括EC2在内的多个服务的包,所以不应该在ElasticBeanstalk EC2实例上安装Node.js服务器吗?我可以为PHP和Node.js使用单独的EC2实例,但这会更昂贵,至少目前我只使用1个实例。

1 个答案:

答案 0 :(得分:0)

我不知道你如何在Heroku上做到这一点,如果有可能的话。在AWS上,您可以在EC2服务器上设置Apache。 Apache将被配置为在特定路径上为您的PHP应用程序提供服务,并将请求代理到其他URL路径上的NodeJS应用程序。

编辑以回答评论中的问题:

  1. 您将无法在一个Elastic Beanstalk环境中部署两个应用程序(PHP和Node)。
  2. 将NodeJS应用程序代码存储在Apache公用文件夹中绝对是一个安全问题。此外,无论如何,您无法以这种方式提供NodeJS应用程序。您可以将NodeJS作为单独的服务器运行在单独的端口上,安装在单独的目录中,甚至安装在完全不同的服务器上。
  3. 这确实不是AWS特定的问题。没有必要将自己局限于AWS教程。只需在Google上搜索类似“NodeJS Apache Proxy”的内容,您就会找到大量的教程。