在 apache 中运行 Node.js?

IT技术 javascript apache node.js webserver
2021-02-20 23:37:07

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

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

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

6个回答

可以使用 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 服务。

这只是推荐。
2021-04-22 23:37:07
首先——非常酷。其次 - 真的,节点的默认端口应该是 leet 中的“精英”?
2021-05-01 23:37:07
想要指出/ProxyPass 和 ProxyPassReverse 指令的尾部斜杠很重要。如果您不设置它们,您将收到 502(代理错误)响应。发生在朋友身上。
2021-05-05 23:37:07

不可以。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 存储库还包含许多很好的示例,从身份验证到组织您的应用程序。

谢谢达伦!幸运的是,这个项目早就完成了!
2021-04-17 23:37:07
现在是 2015 年,我刚刚从这篇文章中了解了 Express。我想知道 Express 与 Meteor 的优点和常量。Express 在 Google Trends 上比meteor 更大,但在下降,而Meteor 正在增长。
2021-04-29 23:37:07
仅供参考,为您带来 Express 的人现在正在开发 Koa。我使用它并喜欢它。它很好地利用了 JavaScript 的 async/await 语法,这是实现异步的最佳方式。
2021-05-09 23:37:07

虽然这里有很多很好的提示,但我想回答您提出的问题:

所以换句话说,它们可以像 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。

希望这可以帮助。

CGI 注入进程创建开销使用FastCGI或本机 Apache Node.js module(如 mod_php)可以减少这种不良影响无论哪种情况 - 使用 Node.js 的动态 Javascript 页面都处于起步阶段
2021-04-18 23:37:07
这个答案更直接地回答了所提出的问题。是否有其他网络服务器能够以与运行 php 脚本相同的方式运行 node.js 脚本?
2021-04-20 23:37:07
似乎有一些 node-cgi 包 - CGI-Node 是否与:larsjung.de/node-cgi相同如果没有,您会知道哪个更成熟/完整吗?
2021-04-24 23:37:07
这正是我在 Dreamhost 上处理动态内容而不是用 PHP 编写的解决方案。JavaScript万岁!
2021-04-26 23:37:07
@uei No Man,我已经按照完整的教程安装了nodejs,但仍然无法从shell/终端运行节点命令。它说找不到节点命令。你是如何从 Godaddy 服务器启动你的 index.js 文件的??因为除非我们在终端上写命令,否则无法运行我们的服务器文件并开始监听端口
2021-04-28 23:37:07

做你想做的事情的常用方法是并排运行它们,或者基于域/url代理从 apache 到 node.js 的请求,或者简单地从节点中提取你的 node.js 内容。 js端口。后面的方法非常适用于在您的网站上使用 socket.io 驱动的小部件之类的东西。


但是,如果您打算在 node 中生成所有动态内容,那么您也可以使用 node.js 作为您的主要网络服务器,它在处理静态和动态 http 请求方面做得非常好。

看:

http://expressjs.com/

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

但是你也可以使用纯 Node.js 制作一个 hello world 页面,这个框架有什么优势吗?
2021-04-23 23:37:07
它为您提供了所有路由的东西,这基本上是您从 apache 获得的(尽管这更灵活/更强大)。
2021-04-29 23:37:07
正确,node.js 在它自己的进程中运行。Express 处理 http 请求的内容,请参阅expressjs.com/api.html .. 很容易上手,页面开头的 hello world 就是您的第一页所需的全部内容。如果你想生成动态内容,你可能会想一些表单模板引擎来生成内容,你会通过快递将返回,请参阅:github.com/joyent/node/wiki/modules#wiki-templating了好的清单。
2021-05-11 23:37:07
如果您与 Apache Node 一起运行它实际上并不是坐在 Apache 之上,是吗?像PHP。它仍然是单独的实例。那是对的吗?另一个问题...我需要 Express 来创建动态页面还是我可以单独使用 Node.js?快递的资料好像不多。。。
2021-05-15 23:37:07

你总是可以做一些 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;