使用apache代理模块可以通过apache托管nodejs站点。
最好在本地主机上使用默认端口1337启动nodejs服务器。
使用以下命令启用代理:
sudo a2enmod proxy proxy_http
在确保服务器安全之前,请勿启用ProxyRequests代理。开放式代理服务器对您的网络和整个互联网都具有危险性。将ProxyRequests设置为Off不会禁用ProxyPass指令的使用。
请使用以下方式配置/etc/apache2/sites-availables
<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服务。
不,NodeJS没有像mod-perl和mod-php那样作为Apache模块的方式可用,因此不可能在Apache之上运行节点。正如hexist指出的那样,可以将node作为单独的进程运行并安排两者之间的通信,但这与您已经使用的LAMP堆栈非常不同。
作为Apache的替代品,如果您有许多同时连接,节点提供性能优势。几乎可以想到任何内容都有一个巨大的模块生态系统。
从您的问题中,不清楚您是否需要在每个请求中动态生成页面,还是定期生成新内容以进行缓存和服务。如果是后者,您可以使用分离的节点任务将内容生成到Apache将提供服务的目录中,但这也与PHP或Perl非常不同。
节点不是提供静态内容的最佳方法。Nginx和Varnish更有效。它们可以在节点处理动态数据的同时提供静态内容。
如果您考虑在Web应用程序中使用节点,Express应该是您的首选。您可以仅使用Node实现Web应用程序,但Express(以及类似的框架,如Flatiron、Derby和Meteor)旨在消除很多痛苦和乏味。虽然Express文档一开始可能显得有些简单,但请查看这里仍然可以找到的屏幕截图:http://expressjs.com/2x/screencasts.html 。它们将让您了解Express提供的功能以及其有用性。ExpressJS的GitHub存储库还包含许多很好的示例,从身份验证到组织应用程序的所有内容都有。
尽管这里有很多好的技巧,但我想回答你的问题:
换句话说,它们可以像Apache/Perl或Apache/PHP等一样协同工作吗?
是的,你可以将Node.js作为CGI模块运行在Apache上,与Perl和PHP共存。目前我还没有找到一个适用于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。
希望这有所帮助。
如果您计划在Node中进行所有动态内容生成,那么最好将node.js作为您的主要Web服务器,它可以很好地处理静态和动态HTTP请求。
参见:
#!/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 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}'");
?>