在apache中运行Node.js?

问题描述 投票:65回答:6

我们在一台机器上安装了一个Apache Web服务器,该机器也使用Perl提供页面。

对于一个项目,我决定使用Node.js而不是Perl / Ruby。只是想知道是否可以使用Apache作为我的网络服务器(因此它服务于页面)并使用Node.js动态创建网页(这是我正在创建的网络应用程序)?

换句话说,它们可以像Apache / Perl或Apache / PHP等一样携手合作。

javascript apache node.js webserver
6个回答
63
投票

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

最好使用默认端口1337在localhost上启动nodejs服务器

使用命令启用代理:

sudo a2enmod proxy proxy_http

在保护服务器之前,请勿使用ProxyRequests启用代理。开放代理服务器对您的网络和整个Internet都是危险的。将ProxyRequests设置为Off不会禁用ProxyPass指令的使用。

配置/ etc / apache2 / sites-可用

<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服务。


41
投票

没有.NodeJS不像mod-perl和mod-php那样可以作为Apache模块使用,因此不可能在“Apache”之上运行节点。正如hexist指出的那样,可以将节点作为一个单独的进程运行并安排两者之间的通信,但这与您已经使用的LAMP堆栈完全不同。

作为Apache的替代品,如果您有许多同时连接,则节点可提供性能优势。对于您能想到的几乎任何事物,还有一个巨大的模块生态系统。

从您的问题来看,您不清楚是否需要在每个请求上动态生成页面,或者只是定期生成新内容以进行缓存和提供。如果是后者,您可以使用单独的节点任务来生成Apache所服务的目录的内容,但同样,这与PHP或Perl完全不同。

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

如果您正在考虑将节点用于Web应用程序,Express应该在您的列表中占据优势。您可以纯粹在Node中实现Web应用程序,但Express(以及像Flatiron,Derby和Meteor这样的类似框架)旨在消除大量的痛苦和乏味。虽然Express文档起初看起来有点稀疏,但请查看仍然可用的屏幕转换:http://expressjs.com/2x/screencasts.html它们将让您很好地了解快递提供的内容及其有用的原因。 ExpressJS的github存储库还包含许多从身份验证到组织应用程序的好例子。


22
投票

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

换句话说,它们可以像Apache / Perl或Apache / PHP等一样携手合作。

是的,您可以在Perl和PHP上运行Apache上的Node.js,如果您将其作为CGI模块运行。到目前为止,我无法为Apache找到一个mod节点,但请查看:这里的cjxswpoi的Apache CGI-Node。

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

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

来自cgi-node.org网站的一个简单示例:

cgi-node

这输出:

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

您还可以完全访问HTTP请求。这包括表单,上传文件,标题等。

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

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

我知道我对此赞不绝口,但使用PHP之外的其他东西终于是一种解脱。此外,还能够在客户端和服务器上编写JavaScript代码。

希望这可以帮助。


4
投票

执行您要执行的操作的常用方法是并排运行它们,并根据domain / url代理从apache到node.js的请求,或者只是从节点中提取node.js内容。 js端口。这个后来的方法非常适合在您的站点上使用socket.io驱动的小部件等。


但是,如果您要在节点中执行所有动态内容生成,那么您也可以使用node.js作为主要Web服务器,它在提供静态和动态http请求方面做得非常好。

看到:

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

http://expressjs.com/


0
投票

在做我自己的服务器端JS实验时,我最终使用了https://github.com/joyent/node/wiki/modules。它符合teajs,基于V8并且是我所知道的唯一提供'mod_teajs'apache服务器模块的项目。

在我看来,Node.js服务器还没有生产就绪并缺少太多功能--Apache正在进行战斗测试并且正确的方式来做SSJS。


0
投票

你可以随时做一些shell脚本:

common.js
© www.soinside.com 2019 - 2024. All rights reserved.