我们在一台机器上安装了一个 Apache Webserver,它也使用 Perl 提供页面。
对于一个项目,我决定使用 Node.js 而不是 Perl/Ruby。只是想知道是否可以使用 Apache 作为我的网络服务器(因此它为页面提供服务)并使用 Node.js 动态创建网页(这是我正在创建的网络应用程序)?
所以换句话说,它们可以像 Apache/Perl 或 Apache/PHP 等一样携手合作。
我们在一台机器上安装了一个 Apache Webserver,它也使用 Perl 提供页面。
对于一个项目,我决定使用 Node.js 而不是 Perl/Ruby。只是想知道是否可以使用 Apache 作为我的网络服务器(因此它为页面提供服务)并使用 Node.js 动态创建网页(这是我正在创建的网络应用程序)?
所以换句话说,它们可以像 Apache/Perl 或 Apache/PHP 等一样携手合作。
可以使用 apache 代理module组织通过 apache 托管 nodejs 站点。
最好在本地主机上使用默认端口 1337 启动 nodejs 服务器
使用命令启用代理:
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 服务。
不可以。NodeJS 不能像 mod-perl 和 mod-php 那样作为 Apache module使用,因此不可能在 Apache 的“之上”运行节点。正如 hexist 指出的那样,可以将 node 作为单独的进程运行并安排两者之间的通信,但这与您已经在使用的 LAMP 堆栈完全不同。
作为 Apache 的替代品,如果您有许多同时连接,node 会提供性能优势。还有一个庞大的module生态系统,几乎可以满足您的任何想法。
从您的问题来看,不清楚您是否需要针对每个请求动态生成页面,或者只是定期生成新内容以进行缓存和服务。如果是后者,您可以使用单独的节点任务将内容生成到 Apache 将提供的目录中,但同样,这与 PHP 或 Perl 完全不同。
Node 不是提供静态内容的最佳方式。Nginx 和 Varnish 在这方面更有效。它们可以提供静态内容,而 Node 处理动态数据。
如果您完全考虑将 node 用于 Web 应用程序,Express 应该在您的列表中名列前茅。您可以完全在 Node 中实现 Web 应用程序,但 Express(以及类似的框架,如 Flatiron、Derby 和 Meteor)旨在消除很多痛苦和乏味。尽管 Express 文档一开始看起来有点稀疏,但请查看此处仍然可用的屏幕截图:http : //expressjs.com/2x/screencasts.html 他们会让您很好地了解 Express 提供的内容以及原因它是有益的。ExpressJS 的 github 存储库还包含许多很好的示例,从身份验证到组织您的应用程序。
虽然这里有很多很好的提示,但我想回答您提出的问题:
所以换句话说,它们可以像 Apache/Perl 或 Apache/PHP 等一样携手合作。
YES,你可以沿着侧Perl和PHP运行Apache的Node.js如果你运行它作为一个CGImodule。到目前为止,我无法找到 Apache 的 mod-node,但请查看:CGI-Node for Apache 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 module运行 Node.js。
CGI-Node.org 站点包含所有入门文档。
我知道我对此赞不绝口,但使用 PHP 以外的东西终于让我松了口气。此外,为了能够在客户端和服务器上编写 JavaScript。
希望这可以帮助。
做你想做的事情的常用方法是并排运行它们,或者基于域/url代理从 apache 到 node.js 的请求,或者简单地从节点中提取你的 node.js 内容。 js端口。后面的方法非常适用于在您的网站上使用 socket.io 驱动的小部件之类的东西。
但是,如果您打算在 node 中生成所有动态内容,那么您也可以使用 node.js 作为您的主要网络服务器,它在处理静态和动态 http 请求方面做得非常好。
看:
你总是可以做一些 shell-scripty 的事情,比如:
#!/usr/bin/node
var header = "Content-type: text/plain\n";
var hi = "Hello World from nodetest!";
console.log(header);
console.log(hi);
exit;