我们在一台机器上安装了一个 Apache HTTP Server,它也使用 Perl 为页面提供服务。
对于一个项目,我决定使用 Node.js 代替 Perl/Ruby。只是想知道是否有可能使用 Apache 作为我的网页服务器(因此它服务于网页) ,并使用 Node.js 动态创建网页(这是我正在创建的一个网页应用程序) ?
所以换句话说,它们可以像 Apache/Perl 或者 Apache/PHP 等一样携手工作。
实现这一目标的常用方法是并排运行它们,要么基于域/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}'"); ?>