我们在机器上安装了Apache Web服务器,该机器还使用Perl提供页面。
对于一个项目,我决定使用Node.js代替Perl / Ruby。只是想知道是否有可能使用Apache作为我的Web服务器(以便为页面提供服务)并使用Node.js动态创建Web页面(这是针对我正在创建的Web应用程序)?
换句话说,它们可以像Apache / Perl或Apache / PHP等一样协同工作。
Answers:
通过apache托管nodejs站点可以使用apache代理模块进行组织。
最好使用默认端口1337在本地主机上启动Node.js服务器
使用以下命令启用代理:
sudo a2enmod proxy proxy_http
在保护服务器安全之前,请勿使用ProxyRequests启用代理。开放式代理服务器对您的网络和整个Internet都是危险的。将ProxyRequests设置为Off不会禁用ProxyPass指令的使用。
使用以下命令配置/ etc / apche2 / 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服务。
/
ProxyPass和ProxyPassReverse指令的尾部斜杠很重要。如果未设置,则会收到502(代理错误)响应。发生了一个朋友。
不能。NodeJS不能像mod-perl和mod-php一样用作Apache模块,因此无法在Apache的“顶部”运行节点。正如hexist指出的那样,可以将节点作为单独的进程运行并安排两者之间的通信,但这与您已经在使用的LAMP堆栈完全不同。
作为Apache的替代品,如果您有许多同时连接,则node具有性能优势。还有一个庞大的模块生态系统,几乎可以想到任何东西。
从您的问题来看,不清楚您是否需要在每个请求上动态生成页面,还是只是定期生成新内容以进行缓存和提供服务。如果是后者,则可以使用单独的节点任务将内容生成到Apache将要服务的目录,但是同样,这与PHP或Perl完全不同。
节点不是提供静态内容的最佳方法。Nginx和Varnish在这方面更有效。它们可以在Node处理动态数据时提供静态内容。
如果您完全考虑将节点用于Web应用程序,则Express应该在您的列表中居于首位。您可以纯粹在Node中实现Web应用程序,但Express(以及Flatiron,Derby和Meteor等类似框架)旨在减轻很多麻烦和乏味。虽然起初Express文档似乎有点稀疏,但请查看仍在此处提供的屏幕截图:http : //expressjs.com/2x/screencasts.html 它们将使您对速递的内容以及原因有一个很好的认识。它是有益的。ExpressJS的github存储库还包含许多不错的示例,涉及从身份验证到组织应用程序的所有内容。
尽管这里有很多好的提示,但我想回答您提出的问题:
换句话说,它们可以像Apache / Perl或Apache / PHP等一样协同工作。
是的,如果您将其作为CGI模块运行,则可以与Perl和PHP一起在Apache上运行Node.js。到目前为止,我无法找到Apache的mod节点,但可以在http://www.cgi-node.org/上找到:Apache的CGI节点。
关于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。
希望这可以帮助。
要做您想做的事情的常用方法是并排运行它们,或者基于域/ url从apache到node.js的代理请求,或者只是将node.js的内容从节点中拉出。 js端口。对于您的站点上具有由socket.io驱动的小部件之类的东西,此后一种方法非常有效。
但是,如果要在node中进行所有动态内容生成,那么最好也将node.js用作主要的Web服务器,它在满足静态和动态http请求方面都做得很好。
看到:
如果您使用的是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}'");
?>