2011-08-19 28 views
0

我寫了一些使用express.js的代碼,我想把它放在與另一種技術(本例中爲Django)實現的Web應用程序相同的HTTP端口上。我不想將用戶瀏覽器重定向到另一個端口,因爲如果我這樣做,他們可能會將URL與另一個端口加入書籤,然後我失去了稍後重新配置安排的能力。因此,我希望express.js在其端口上提供HTTP服務,實現通過向另一個端口上提供的輔助Web應用程序發出HTTP請求指定的某些路徑。如何通過向其他Web應用程序發出請求來爲express.js中的某些URL提供服務?

express.js是否有任何中間件或其他技術通過向其他服務器發送HTTP請求來提供某些路徑?

The stackoverflow question How to make web service calls in Expressjs?是相關的,但只討論GET和我會有一些POST請求轉發。)

回答

1

隨着node-http-proxy僅單個呼叫需要反向代理所有未處理請求app.use,像這樣:

var app = express.createServer(); 
# my app.get bindings 
app.use(require('http-proxy').createServer(80, 'other-server-address')); 
app.listen(80); 
2

雖然有可能使與節點POST請求,我想您所描述的模式更適合在node.js和django之前使用nginxapache之類的服務器,並根據請求將請求代理到適當的端口。

通常,django和node.js都會偵聽您希望他們監聽的任何端口,而nginx監聽端口80.然後,您可以在nginx中定義一個虛擬主機,將某些請求轉發給node.js,並將某些請求到Django。

Here是使用proxy_pass的nginx文檔。

下面是一個例子,從nginx的Full Example修改:

server { # simple reverse-proxy 
    listen  80; 
    server_name domain2.com www.domain2.com; 

    # serve static files 
    location ~ ^/(images|javascript|js|css|flash|media|static)/ { 
     root /var/www/virtual/big.server.com/htdocs; 
    } 

    # pass requests for dynamic content to django 
    location /djangostuff { 
     proxy_pass  http://127.0.0.1:8080; 
    } 

    # pass requests for node 
    location /nodestuff { 
     proxy_pass  http://127.0.0.1:8081; 
    } 

    } 
+0

我曾想過這種方法,但擔心socket.io可能無法通過代理工作。我會嘗試一下並找出答案。 –

+0

從一個小小的Google搜索聽起來就像你需要用tcp_proxy支持來編譯nginx。據推測,Apache或您的網絡服務器都有類似的模塊。 –

+0

[此博客文章](http://www.letseehere.com/reverse-proxy-web-sockets)似乎描述瞭如何將tcp_proxy支持添加到nginx。 –

相關問題