2011-04-09 164 views
15

我的工作在運行apache的ubuntu服務器(10.10)上運行幾個不同的內部web應用程序。我目前正在開發另一個Web應用程序,並且正在認真考慮在定製的Node.js Web服務器上進行開發。我爲希望這樣做的理由是:發送子域名到node.js

  1. 速度/可擴展性
  2. 安全 - 網頁將與開關...情況下提供服務,而不是僅僅服務有求必應的(潛在的惡意軟件)的用戶。
  3. 易於設置 - 我的目的是爲了成爲一個開源項目,並且node.js對於用戶來說更容易設置,而不是處理apache/IIS /等。

我的問題是,在一臺服務器上,我有apache監聽端口80,我怎樣才能將某個子域傳遞給node.js.我見過一些關於使用apache虛擬主機傳遞它的文章,但是這似乎打破了使用node.js的目的。如果我必須通過apache,那麼我所有避免使用apache/IIS的三個理由都已經失效了。

我知道我可以使用不同的端口(:8080?),但是從最終用戶的角度來看,必須放入自定義端口非常混亂。任何替代的想法?

感謝

回答

5

如何做另一種方式:將節點綁定到端口80,處理針對子域的流量並將其用作apache的反向代理以完成其他任務?

+0

任何好的Node.js的模塊/擴展或你知道的這個教程?或者至少有一個好的關鍵字用來搜索? – jwegner 2011-04-09 17:36:58

+0

[節點http代理](https://github.com/nodejitsu/node-http-proxy)應該做的伎倆。 – Adrien 2011-04-09 18:24:12

4

讓我從地上爬起來開始:

你有DNS。而一個DNS服務器將一個DNS映射到一個IP!

你就必須apache計算機偵聽的http://和端口443 https://port 80連接上運行。 http://example/實際上是http://example:80/上的一項請求。

您不能使用node.js在與apache相同的端口上偵聽同一臺計算機。這就是爲什麼使用8080端口是可行的。

您也可以將子域映射到不同的IP。唯一需要注意的是你需要有一個公共IP地址。

4

您無法從Apache和node.js中爲端口80提供服務。將Apache作爲reverse proxy不會很有效,這就是爲什麼nginx在這種情況下非常流行的原因。除了基於nginx的反向代理之外,其他的替代方法可以如Khez建議的將子域映射到不同的IP地址,其將node.js編程爲listen,或者可以使用node.js本身作爲Apache的反向代理。

1

您可以在apache中爲您的新站點配置一個虛擬主機,並將其中的永久重定向添加到node.js使用的本地主機和端口中。

這就是我如何在具有其他幾個虛擬主機和我的節點的服務器上執行此操作。JS應用運行在端口3000:

了NameVirtualHost *:(。*)80

[其他虛擬主機不再贅述]

...

服務器名mynewsite.com RedirectMatch http://localhost:3000 $ 1

+1

我知道這是一歲...這實際上工作嗎?我注意到這個答案得到了0贊同,所有其他帖子都說OP要求的是不可能的。 – 2012-09-10 16:55:38

2

如果socket.io節點正在運行,一定也使一些阿帕奇MODS:

  1. a2enmod代理
  2. a2enmod proxy_balancer
  3. a2enmod proxy_express
  4. a2enmod proxy_http

文件中/etc/apache2/sites-available/chat.example.com.conf


<VirtualHost *:80> 
    ServerName chat.example.com 

    <Location "/"> 
     ProxyPreserveHost On 
     ProxyPass http://localhost:3000/ 
     ProxyPassReverse http://localhost:3000/ 
    </Location> 
</VirtualHost> 

那麼當然service apache2 reload