在 Apache 中运行 Node.js?

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

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

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

122024 次浏览

实现这一目标的常用方法是并排运行它们,要么基于域/url 从 apache 向 node.js 发出代理请求,要么从 node.js 端口提取 node.js 内容。后面的方法对于在您的站点上使用诸如 socket.io 之类的小部件非常有效。


然而,如果你要在 node 中生成所有的动态内容,你也可以使用 node.js 作为主要的 web 服务器,它在静态和动态 http 请求方面都做得很好。

参见:

Http://expressjs.com/

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

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

作为 Apache 的替代品,如果有许多同时连接,那么 node 具有性能优势。还有一个巨大的模块生态系统,可以用于几乎任何您能想到的东西。

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

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

如果您正在考虑为 Web 应用程序使用节点,Express 应该在您的列表的前列。你可以完全在 Node 中实现一个 web 应用程序,但 Express (以及类似的 Flatiron、 Derby 和 Meteor 框架)的设计就是为了消除许多痛苦和乏味。虽然 Express 文档一开始看起来有点稀疏,但是请查看仍然可以在这里获得的屏幕转换: http://expressjs.com/2x/screencasts.html它们会让您很好地了解 Express 提供了什么以及为什么它有用。ExpressJS 的 github 存储库还包含许多很好的示例,从身份验证到组织应用程序。

在做我自己的服务器端 JS 实验时,我最终使用了 Teajs。它符合 通用 JS,是基于 V8 AND 是我所知道的唯一一个提供‘ mod _ teajs’apache 服务器模块的项目。

在我看来,Node.js 服务器还没有投入生产,而且缺乏太多的特性—— Apache 经过了实战测试,是执行 SSJS 的正确方法。

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

最好使用默认端口1337在本地主机上启动 nodejs 服务器

使用命令启用代理:

sudo a2enmod proxy proxy_http

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

配置/etc/apche2/site-可用

<VirtualHost *:80>
ServerAdmin admin@site.com
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服务。

尽管这里有很多好的建议,我还是想回答你提出的问题:

换句话说,它们可以像 Apache/Perl 或者 Apache/PHP 等等。

YES ,您可以在 Apache 上运行 Node.js 和 Perl 以及作为 CGI 模块运行的 PHP 如果。到目前为止,我还无法找到一个用于 Apache 的 mod-node,但请查看: CGI-Node for Apache here 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 代码。

希望这个能帮上忙。

您总是可以使用 shell 脚本进行以下操作:

#!/usr/bin/node


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


exit;

如果使用 PHP,可以通过 shell _ exec 将请求传递给 Node 脚本,在命令行中将参数作为 JSON 字符串传递给脚本。示例呼叫:

<?php
shell_exec("node nodeScript.js"); // without arguments
shell_exec("node nodeScript.js '{[your JSON here]}'"); //with arguments
?>

需要注意的是,当用户数据靠近命令行时,非常需要小心处理用户数据。噩梦例子:

<?php
$evilUserData = "'; [malicious commands here];";
shell_exec("node nodeScript.js '{$evilUserData}'");
?>