我想使用Node,因为它速度很快,使用的是我在客户端使用的相同语言,并且按照定义它是非阻塞的。但是我雇用来编写程序进行文件处理(保存,编辑,重命名,下载,上传文件等)的那个人,他想使用apache。因此,我必须:
说服他使用Node(在此方面他几乎没有放弃)
弄清楚如何在节点或节点中上载,下载,重命名,保存等文件
我必须在同一服务器上安装apache和node。
哪个是最有利的情况,我该如何实施?
我想使用Node,因为它速度很快,使用的是我在客户端使用的相同语言,并且按照定义它是非阻塞的。但是我雇用来编写程序进行文件处理(保存,编辑,重命名,下载,上传文件等)的那个人,他想使用apache。因此,我必须:
说服他使用Node(在此方面他几乎没有放弃)
弄清楚如何在节点或节点中上载,下载,重命名,保存等文件
我必须在同一服务器上安装apache和node。
哪个是最有利的情况,我该如何实施?
说明运行node server
沿apache2(v2.4.xx) server
:
为了管在一个特定的URL的所有请求您的Node.js应用程序创建CUSTOM.conf
的内部文件/etc/apache2/conf-available
目录,并添加以下行创建的文件:
ProxyPass /node http://localhost:8000/
将8000更改为首选端口号node server
。
使用以下命令启用自定义配置:
$> sudo a2enconf CUSTOM
CUSTOM是您新创建的文件名,不带扩展名,然后proxy_http
使用以下命令启用:
$> sudo a2enmod proxy_http
它应该同时启用proxy
和proxy_http
模块。您可以使用以下方法检查模块是否已启用:
$> sudo a2query -m MODULE_NAME
启用配置和模块后,您将需要重新启动apache服务器:
$> sudo service apache2 restart
现在,您可以执行节点服务器。对的所有请求URL/node
将由节点服务器处理。
我最近遇到了一个类似的问题,我需要在基于PHP的codeigniter项目中使用websocket在客户端和服务器之间进行通信。
我通过将端口(正在运行的节点应用)添加到Allow incoming TCP ports
&Allow outgoing TCP ports
列表中解决了此问题。
您可以Firewall Configurations
在服务器的WHM面板中找到这些配置。
在一台服务器上运行Node和Apache很简单,因为它们不会冲突。NodeJS只是执行JavaScript服务器端的一种方式。真正的困境来自外部访问Node和Apache。在我看来,您有两种选择:
设置Apache以将所有匹配的请求代理到NodeJS,这将执行文件上传以及节点中的其他操作。
将Apache和Node放在不同的IP:port组合上(如果您的服务器有两个IP,则一个可以绑定到节点侦听器,另一个绑定到Apache)。
我也开始怀疑这可能不是您真正想要的。如果您的最终目标是用Node.js编写应用程序逻辑,然后将某些“文件处理”部分卸载给承包商,那么这实际上是一种语言选择,而不是Web服务器。
这个问题更多地涉及服务器故障,但是FWIW我想说在大多数情况下在Node.js之前运行Apache不是一个好方法。
Apache的ProxyPass在很多方面都很棒(例如,将基于Tomcat的服务作为站点的一部分公开),并且如果您的Node.js应用只是在做特定的,小的角色,或者是内部工具,只可能有有限的用户数量那么使用它可能会更容易,这样您就可以继续使用它,但是听起来不像这里。
如果要利用性能和扩展性,可以从使用Node.js中获得收益-特别是如果您要使用涉及维护持久性连接(如Web套接字)的东西-最好同时运行Apache和Node。 js在其他端口上(例如localhost:8080上的Apache,localhost:3000上的Node.js),然后在前面运行类似nginx,Varnish或HA代理的内容-并以此方式路由流量。
使用诸如varnish或nginx之类的东西,您可以基于路径和/或主机来路由流量。与使用Apache进行相同的操作相比,它们都使用更少的系统资源,并且具有更大的可伸缩性。
ProxyPass /node http://localhost:8000/
我假设您正在制作Web应用程序,因为您引用的是Apache和Node。快速解答-是否可以-是。是否推荐-否。Node捆绑了它自己的Web服务器,大多数网站都在端口80上运行。我还假设Nodejs目前不支持Apache插件,并且我不确定创建虚拟主机是否是实现此目的的最佳方法。这些是像Joyent一样的维护Nodejs的开发人员应该回答的问题。
最好不要评估端口,而要评估Node的技术堆栈,因为它与大多数其他堆栈完全不同,这就是我喜欢它的原因,但是它还涉及一些您应该事先意识到的折衷方案。
您的示例看起来类似于CMS或共享Web应用程序,并且有数百种开箱即用的应用程序可以在Apache上很好地运行。即使您不喜欢任何现成的解决方案,也可以用PHP / Java / Python编写一个Webapp或将它与几个现成的应用程序混合使用,它们都经过设计和支持,可在单个Apache实例后运行。
现在是时候停下来想一想我刚才说的话了。
现在您可以决定要使用哪个技术堆栈了。如果您的网站永远不会使用数千个需要Apache的现成应用程序中的任何一个,那么请使用Node,否则您必须首先消除我之前所说的假设。
最后,您选择的技术栈比任何单个组件都重要。
我完全同意@Straseus的观点,即使用node.js文件系统api处理上传和下载相对比较简单,但从长远来看,请更多地考虑您想要从网站中获得什么,然后选择您的技术栈。
学习Node的框架比学习其他框架要容易,但这不是万能的。稍加努力(本身可能是值得的),您也可以学习任何其他框架。我们彼此学习,如果您作为一个小型团队工作,与单独工作相比,您的工作效率会更高。因此,不要那么便宜地降低团队其他成员的技能。
这篇文章大约有一年的历史了,很可能您已经决定了,但是我希望我的助手能帮助下一个正在做出类似决定的人。
谢谢阅读。