2013-01-16 125 views
57

我们在一台也使用Perl提供页面的机器上安装了Apache Web服务器。在Apache中运行Node.js?

对于一个项目,我已经决定要使用Node.js的替代的Perl/Ruby的。只是想知道是否可以使用Apache作为我的网络服务器(所以它服务于网页),并使用Node.js动态创建网页(这是为我创建的Web应用程序)?

因此,换句话说,他们能携手就像阿帕奇/ Perl或阿帕奇/ PHP等。

回答

5

去做你在找什么做的,就是靠跑他们边的常用方法,并根据域/ url从apache到node.js的代理请求,或者简单地从node.js端口提取您的node.js内容。这个后面的方法很适合在你的站点上使用诸如socket.io的widgets等。


如果你打算然而,可以做所有的动态内容生成的节点,你可能也只是使用Node.js的作为主Web服务器也一样,它在服务于静做了很好的工作和动态http请求。

参见:

http://expressjs.com/

https://github.com/joyent/node/wiki/modules

+0

如果你运行它和Apache一起节点实际上不是“之上”阿帕奇坐呢?像PHP一样。 它仍然是单独的实例。那是对的吗? 另一个问题......我是否需要Express来创建动态页面,或者我可以直接使用Node.js?似乎没有太多的快递信息... – JackSparrow123

+0

正确,node.js运行在它自己的进程中。 Express处理http请求的内容,请参阅http://expressjs.com/api.html ..它很容易实现,页面开始处的Hello World是您首页所需的全部内容。如果您想生成动态内容,您可能需要某种形式的模板引擎来生成您将通过快递返回的内容,请参阅:https://github.com/joyent/node/wiki/modules#wiki - 模拟一个很好的列表。 – hexist

+0

但你可以使用纯Node.js做一个hello世界的页面,框架优于任何优势? – JackSparrow123

42

号的NodeJS不能作为的方式MOD-Perl和MOD-PHP的Apache模块都是,所以它不是可以运行节点“在“Apache之上”。正如hexist指出的那样,可以将节点作为单独的进程运行并安排两者之间的通信,但这与您已经使用的LAMP堆栈完全不同。

至于Apache的一个替代品,节点提供了性能上的优势,如果你有很多的并发连接。对于几乎所有你能想到的事物,还有一个巨大的模块生态系统。

从你的问题,目前还不清楚,如果你需要动态地生成每个请求的网页,或只是周期性地产生新的内容缓存和服务。如果是后者,可以使用单独的节点任务来将内容生成到Apache将要提供的目录中,但是再次,这与PHP或Perl完全不同。

节点并不是提供静态内容的最佳方式。 Nginx和Varnish在这方面更有效。它们可以在Node处理动态数据时提供静态内容。

如果您使用节点的web应用程序在所有的考虑,快递应该是高的名单上。您可以纯粹在Node中实现一个Web应用程序,但Express(以及Flatiron,Derby和Meteor等类似的框架)旨在消除很多痛苦和枯燥乏味。虽然Express文档起初看起来有点稀疏,但请查看这里仍然可用的屏幕演示文稿:http://expressjs.com/2x/screencasts.html他们会让您很好地了解Express提供的内容以及它的用途。 ExpressJS的github存储库还包含许多从认证到组织应用程序的好例子。

+1

谢谢达伦!幸运的是,这个项目早已结束! – JackSparrow123

+0

这是2015年,我刚刚从这篇文章了解到Express。我想知道Express与流星的优点和常量。 Google Trends中的Express比流星更大,但下降,流星正在增长。 – Ruby

0

在做我自己的服务器端JS实验最后我用teajs。它符合common.js,基于V8 AND是我所知道的唯一提供'mod_teajs'apache服务器模块的项目。

在我看来,Node.js服务器并没有准备好,并且没有太多的功能 - Apache经过了战斗测试和正确的SSJS方法。

41

通过apache托管nodejs站点可以使用apache代理模块进行组织。

这是更好地开始在本地主机服务器的NodeJS使用默认端口1337

与命令启用代理:

sudo a2enmod proxy proxy_http 

,直到你已经获得您的服务器不能够与将ProxyRequests代理。开放代理服务器对您的网络和整个Internet都是危险的。将ProxyRequests设置为Off不会禁用ProxyPass指令的使用。

配置的/ etc/apche2 /网站,可获取与

<VirtualHost *:80> 
    ServerAdmin [email protected] 
    ServerName site.com 
    ServerAlias www.site.com 

    ProxyRequests off 

    <Proxy *> 
     Order deny,allow 
     Allow from all 
    </Proxy> 

    <Location /> 
     ProxyPass http://localhost:1337/ 
     ProxyPassReverse http://localhost:1337/ 
    </Location> 
</VirtualHost> 

并重新启动的Apache2服务。

+2

完美!我的奋斗以这个解决方案结束。谢谢! :) – softvar

+1

[确保你的服务器安全的步骤](https://wiki.apache.org/httpd/ProxyAbuse) – Jacksonkr

+1

首先 - 很酷。其次 - 实际上,节点的默认端口应该是leet中的'精英'说话吗? –

19

虽然有很多在这里很好的提示我想回答你问的问题:

因此,换句话说,他们可以携手合作,只是像Apache/Perl或 的Apache/PHP等等。

YES,你可以在Apache沿IF可以将其作为一个CGI模块侧Perl和PHP 运行Node.js的。到目前为止,我无法找到Apache的mod-node,但请查看:Apache的CGI-Node,这里是http://www.cgi-node.org/

关于cgi-node有趣的部分是它使用JavaScript,就像使用PHP来生成动态内容,静态页面服务,访问SQL数据库等一样。甚至可以在服务器和客户端/浏览器之间共享核心JavaScript库。

我认为客户端和服务器之间的单一语言转变正在发生,JavaScript似乎是一个不错的选择。

从cgi-node.org网站一个简单的例子:

<? include('myJavaScriptFile.js'); ?> 
<html> 
    <body> 
     <? var helloWorld = 'Hello World!'; ?> 
     <b><?= helloWorld ?><br/> 
     <? for(var index = 0; index < 10; index++) write(index + ' '); ?> 
    </body> 
</html> 

此输出:

Hello World! 
0 1 2 3 4 5 6 7 8 9 

您还可以完全访问HTTP请求。包括表格,上传的文件,头文件等。

我目前通过Godaddy上的cgi-node模块运行Node.js。

CGI-Node.org网站有所有文档入门。

我知道我很喜欢这个,但最终使用PHP以外的其他东西是一种解脱。另外,还可以在客户端和服务器上编写JavaScript代码。

希望这会有所帮助。

+0

在野外似乎有几个node-cgi包 - CGI-Node与https://larsjung.de/node-cgi/相同。如果不是,你会知道哪个更成熟/完整吗? –

+0

这正是我在寻找处理Dreamhost上的动态内容而不是用PHP编写的解决方案。 Viva la JavaScript! – Sukima

+0

这个答案更直接地回答了问题。有没有其他的网络服务器能够像运行php脚本一样运行node.js脚本? –

0

你总是可以做一些壳指令码,如:

#!/usr/bin/node 

var header = "Content-type: text/plain\n"; 
var hi = "Hello World from nodetest!"; 
console.log(header); 
console.log(hi); 

exit;