2011-11-23 79 views
0

我有一個問題的兩個部分部署在EC2上使用Apache代理的NodeJS(錯?)和登錄

問題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將日誌寫入文件。

回答

2

1)使用像Apache這樣的代理來代理Node.js是錯誤的,最好使用像Nginx之類的東西或節點解決方案,如node-proxybouncy。這是錯誤的,因爲Apache阻塞併爲每個連接創建一個新線程,與Nginx和Node完全不同。通過使用Apache,您將移除Node.js爲您提供的優勢(數千併發連接和低內存佔用空間)。

2)據我所知,可能是最受歡迎的日誌庫是Winston

+0

什麼是阿爾弗雷德NSH這似乎很像我需要什麼建議推薦的解決Nginx的或節點的HTTP代理。 我無法找到關於爲什麼一個會比另一個更好的信息。 – Sid

+0

Nginx實際上是一個具有「插件」/「模塊」(用於gzip,GeoIP,代理等等)的web服務器,而node-http-proxy只是一個使用Node.js構建的代理。你可以使用Nginx(通常人們使用它附加模塊,根據需要自定義)或者只使用node-http-proxy。無論你選擇哪個都是好的。 – alessioalex

+1

你的回答對我來說似乎很熟悉!爲什麼我的答案沒有被接受? :P –

2

實際上,瘋狂的科學家們製作了node-http-proxy以確保人們不使用Apache或Nginx作爲NodeJS的代理。如果你問我,我會說使用模塊,更容易,更輕,更快(不太確定,但它節點!)。

截至記錄我會推薦使用Winston module這是很容易使用。

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