在apache中运行Node.js?

Jac*_*123 68 javascript apache webserver node.js

我们在一台机器上安装了一个Apache Web服务器,该机器也使用Perl提供页面.

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

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

Evg*_*pov 64

通过apache托管nodejs站点可以使用apache代理模块进行组织.

最好使用默认端口1337在localhost上启动nodejs服务器

使用命令启用代理:

sudo a2enmod proxy proxy_http
Run Code Online (Sandbox Code Playgroud)

在保护服务器之前,请勿使用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>
Run Code Online (Sandbox Code Playgroud)

并重新启动apache2服务.

  • 完善!我的斗争以此解决方案结束.谢谢!:) (4认同)
  • [确保服务器安全的步骤](https://wiki.apache.org/httpd/ProxyAbuse) (2认同)
  • 首先-非常酷。第二-真的,节点的默认端口应该是“精英”吗? (2认同)

Dar*_*ren 42

没有.NodeJS不像mod-perl和mod-php那样可以作为Apache模块使用,因此不可能在"Apache"之上运行节点.正如hexist指出的那样,可以将节点作为一个单独的进程运行并安排两者之间的通信,但这与您已经使用的LAMP堆栈完全不同.

作为Apache的替代品,如果您有许多同时连接,则节点可提供性能优势.对于您能想到的几乎任何事物,还有一个巨大的模块生态系统.

从您的问题来看,您不清楚是否需要在每个请求上动态生成页面,或者只是定期生成新内容以进行缓存和提供.如果是后者,您可以使用单独的节点任务来生成Apache将服务的目录的内容,但同样,这与PHP或Perl完全不同.

节点不是提供静态内容的最佳方式.Nginx和Varnish在这方面更有效.它们可以在Node处理动态数据时提供静态内容.

如果您正在考虑将节点用于Web应用程序,Express应该在您的列表中占据优势.您可以纯粹在Node中实现Web应用程序,但Express(以及像Flatiron,Derby和Meteor这样的类似框架)旨在消除大量的痛苦和乏味.尽管Express文档起初看起来有点稀疏,但请查看仍然可用的屏幕转换:http://expressjs.com/2x/screencasts.html 它们会让您很好地了解快递提供的内容和原因它是有益的.ExpressJS的github存储库还包含许多从身份验证到组织应用程序的好例子.


小智 23

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

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

是的,您可以在Perl和PHP上运行Apache上的Node.js,如果您将其作为CGI模块运行.作为然而,我无法找到阿帕奇国防部节点,但检查出:CGI节点为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>
Run Code Online (Sandbox Code Playgroud)

这输出:

Hello World!
0 1 2 3 4 5 6 7 8 9
Run Code Online (Sandbox Code Playgroud)

您还可以完全访问HTTP请求.这包括表单,上传文件,标题等.

我目前正通过Godaddy上的cgi-node模块运行Node.js.

CGI-Node.org网站提供了所有入门文档.

我知道我对此赞不绝口,但最后使用PHP之外的其他东西是一种解脱.此外,还能够在客户端和服务器上编写JavaScript代码.

希望这可以帮助.


hex*_*ist 5

要做您想做的事情的常用方法是并排运行它们,或者基于域/ url从apache到node.js的代理请求,或者只是将node.js的内容从节点中拉出。 js端口。对于您的站点上具有由socket.io驱动的小部件之类的东西,此后一种方法非常有效。


但是,如果要在node中进行所有动态内容生成,那么最好也将node.js用作主要的Web服务器,它在满足静态和动态http请求方面都做得很好。

看到:

http://expressjs.com/

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