2013-01-16 73 views
57

我們在一臺也使用Perl提供頁面的機器上安裝了Apache Web服務器。在Apache中運行Node.js?

對於一個項目,我已經決定要使用Node.js的替代的Perl/Ruby的。只是想知道是否可以使用Apache作爲我的網絡服務器(所以它服務於網頁),並使用Node.js動態創建網頁(這是爲我創建的Web應用程序)?

因此,換句話說,他們能攜手就像阿帕奇/ Perl或阿帕奇/ PHP等。

回答

5

去做你在找什麼做的,就是靠跑他們邊的常用方法,並根據域/ url從apache到node.js的代理請求,或者簡單地從node.js端口提取您的node.js內容。這個後面的方法很適合在你的站點上使用諸如socket.io的widgets等。


如果你打算然而,可以做所有的動態內容生成的節點,你可能也只是使用Node.js的作爲主Web服務器也一樣,它在服務於靜做了很好的工作和動態http請求。

參見:

http://expressjs.com/

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

+0

如果你運行它和Apache一起節點實際上不是「之上」阿帕奇坐呢?像PHP一樣。 它仍然是單獨的實例。那是對的嗎? 另一個問題......我是否需要Express來創建動態頁面,或者我可以直接使用Node.js?似乎沒有太多的快遞信息... – JackSparrow123

+0

正確,node.js運行在它自己的進程中。 Express處理http請求的內容,請參閱http://expressjs.com/api.html ..它很容易實現,頁面開始處的Hello World是您首頁所需的全部內容。如果您想生成動態內容,您可能需要某種形式的模板引擎來生成您將通過快遞返回的內容,請參閱:https://github.com/joyent/node/wiki/modules#wiki - 模擬一個很好的列表。 – hexist

+0

但你可以使用純Node.js做一個hello世界的頁面,框架優於任何優勢? – JackSparrow123

42

號的NodeJS不能作爲的方式MOD-Perl和MOD-PHP的Apache模塊都是,所以它不是可以運行節點「在「Apache之上」。正如hexist指出的那樣,可以將節點作爲單獨的進程運行並安排兩者之間的通信,但這與您已經使用的LAMP堆棧完全不同。

至於Apache的一個替代品,節點提供了性能上的優勢,如果你有很多的併發連接。對於幾乎所有你能想到的事物,還有一個巨大的模塊生態系統。

從你的問題,目前還不清楚,如果你需要動態地生成每個請求的網頁,或只是週期性地產生新的內容緩存和服務。如果是後者,可以使用單獨的節點任務來將內容生成到Apache將要提供的目錄中,但是再次,這與PHP或Perl完全不同。

節點並不是提供靜態內容的最佳方式。 Nginx和Varnish在這方面更有效。它們可以在Node處理動態數據時提供靜態內容。

如果您使用節點的web應用程序在所有的考慮,快遞應該是高的名單上。您可以純粹在Node中實現一個Web應用程序,但Express(以及Flatiron,Derby和Meteor等類似的框架)旨在消除很多痛苦和枯燥乏味。雖然Express文檔起初看起來有點稀疏,但請查看這裏仍然可用的屏幕演示文稿:http://expressjs.com/2x/screencasts.html他們會讓您很好地瞭解Express提供的內容以及它的用途。 ExpressJS的github存儲庫還包含許多從認證到組織應用程序的好例子。

+1

謝謝達倫!幸運的是,這個項目早已結束! – JackSparrow123

+0

這是2015年,我剛剛從這篇文章瞭解到Express。我想知道Express與流星的優點和常量。 Google Trends中的Express比流星更大,但下降,流星正在增長。 – Ruby

0

在做我自己的服務器端JS實驗最後我用teajs。它符合common.js,基於V8 AND是我所知道的唯一提供'mod_teajs'apache服務器模塊的項目。

在我看來,Node.js服務器並沒有準備好,並且沒有太多的功能 - Apache經過了戰鬥測試和正確的SSJS方法。

41

通過apache託管nodejs站點可以使用apache代理模塊進行組織。

這是更好地開始在本地主機服務器的NodeJS使用默認端口1337

與命令啓用代理:

sudo a2enmod proxy proxy_http 

,直到你已經獲得您的服務器不能夠與將ProxyRequests代理。開放代理服務器對您的網絡和整個Internet都是危險的。將ProxyRequests設置爲Off不會禁用ProxyPass指令的使用。

配置的/ etc/apche2 /網站,可獲取與

<VirtualHost *:80> 
    ServerAdmin [email protected] 
    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服務。

+2

完美!我的奮鬥以這個解決方案結束。謝謝! :) – softvar

+1

[確保你的服務器安全的步驟](https://wiki.apache.org/httpd/ProxyAbuse) – Jacksonkr

+1

首先 - 很酷。其次 - 實際上,節點的默認端口應該是leet中的'精英'說話嗎? –

19

雖然有很多在這裏很好的提示我想回答你問的問題:

因此,換句話說,他們可以攜手合作,只是像Apache/Perl或 的Apache/PHP等等。

YES,你可以在Apache沿IF可以將其作爲一個CGI模塊側Perl和PHP 運行Node.js的。到目前爲止,我無法找到Apache的mod-node,但請查看:Apache的CGI-Node,這裏是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模塊運行Node.js。

CGI-Node.org網站有所有文檔入門。

我知道我很喜歡這個,但最終使用PHP以外的其他東西是一種解脫。另外,還可以在客戶端和服務器上編寫JavaScript代碼。

希望這會有所幫助。

+0

在野外似乎有幾個node-cgi包 - CGI-Node與https://larsjung.de/node-cgi/相同。如果不是,你會知道哪個更成熟/完整嗎? –

+0

這正是我在尋找處理Dreamhost上的動態內容而不是用PHP編寫的解決方案。 Viva la JavaScript! – Sukima

+0

這個答案更直接地回答了問題。有沒有其他的網絡服務器能夠像運行php腳本一樣運行node.js腳本? –

0

你總是可以做一些殼指令碼,如:

#!/usr/bin/node 

var header = "Content-type: text/plain\n"; 
var hi = "Hello World from nodetest!"; 
console.log(header); 
console.log(hi); 

exit;