在Ec2上部署带有Apache代理的NodeJS(错误?)和日志记录

时间:2011-11-23 12:55:32

标签: apache node.js amazon-ec2 logging

我有两个问题

问题1

使用Apache作为我的nodeJS服务器的代理是不对的,因为它无法处理Websockets。我目前正在使用Apache与BOSH,我想知道使用节点部署的正确方法是什么,以便我也可以使用websockets。

我的apache配置如下



   ServerName example.com
   ProxyPass / http://localhost:9000/
   ProxyPassReverse /  http//localhost:9000/
  
        Order allow,deny
        Allow from all
  


这种做法完全错了吗?我可以毫无困难地使用我的应用程序(作为API工作)。我需要尽快添加websocket支持,然后这个配置会失败吗?

问题2
我还想知道如何让NodeJS将日志写入文件。

3 个答案:

答案 0 :(得分:2)

实际上,疯狂的科学家们让node-http-proxy确保人们不会使用Apache或Nginx作为NodeJS的代理。如果你问我,我会说使用模块,更容易,更轻,更快(不太确定,但节点!)。

在记录日志时,我建议使用Winston module,这很容易使用。

答案 1 :(得分:2)

1)使用像Apache这样的东西代理Node.js是错误的,最好使用像Nginx这样的东西或像node-proxybouncy这样的Node解决方案。这是错误的,因为Apache阻塞并为每个连接创建一个新线程,与Nginx和Node完全不同。通过使用Apache,您将消除Node.js为您提供的优势(数千个并发连接和低内存占用)。

2)据我所知,最受欢迎的日志库可能是Winston

答案 2 :(得分:1)

使用新版本的Apache(2.4.5+),您可以使用mod_proxy_wstunnel来实现此目的。

我最近做了一个简单的实验。它似乎与Apache,Nodejs和socket.io的组合工作正常。

LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_http_module modules/mod_proxy_http.so
LoadModule proxy_wstunnel_module modules/mod_proxy_wstunnel.so

ProxyPass /socket.io/1/websocket/ ws://127.0.0.1:8899/socket.io/1/websocket/
ProxyPass /socket.io/ http://127.0.0.1:8899/socket.io/

详细说明: https://github.com/mksamfolk/sandbox/tree/master/apache_websocket