2013-07-09 268 views
1

我有很多Web應用程序在服務器上運行。其中一些我已經做了,其中一些是開源的(如開放雲)。我所有的網絡應用都運行在特定的端口上。我的端口80仍然是免費的。將url路徑重定向到端口

我想爲我的同事在本地網絡上看到他們在端口80上的所有應用程序製作一個不錯的歡迎網頁。

我的問題是設置url地圖。我希望路徑http://machine-name:80/open-cloud/http://machine-name:8080/完全相同(如果可能,包括靜態文件)。

另一種可能的解決方案是對每個應用程序使用子域,例如http://open-cloud.machine-name:80/。但我不知道如何在本地網絡中做到這一點。

我正在尋找一個解決方案,在Python,node.js或去(這將是太棒了!)。需要注意的是,我的web應用程序沒有一個在ssl上運行,並且它可能會處理非常低的流量。畢竟它只是一個本地網絡!

任何幫助和參考將受到歡迎。

乾杯!

+0

爲什麼寫這樣的程序時,你可以用類似nginx這樣做?順便說一下,它是微不足道的(只有幾十行代碼)在Go中寫入。 – Mostafa

回答

3

您只需要某種代理服務器,例如http://nginx.org

然後通過你想要的域名,以您的應用程序的端口:

server { 
    listen 80; 
    server_name app1.local; 

    location/{ 
    proxy_pass   http://127.0.0.1:8080/; 
    proxy_set_header HOST $http_host; 
    proxy_set_header X-Real-IP $remote_addr; 
    } 
} 
+0

非常感謝那個!它解決了我的問題。我知道這是一個基本問題,但我很難找到一個優雅的解決方案。 – user983716

2

如果你堅持寫在走自己的解決方案,你可以設置一個http.Redirect每個URL 這樣的:

import "net/http" 

var urlMap = map[string]string { 
    "open-cloud": "http://machine-name:8080/", 
    "some-other": "http://machine-name:9090/", 
} 

func redirectHandler(target string) http.HandlerFunc { 
    return func(w http.ResponseWriter, r *http.Request) { 
     http.Redirect(w, r, target, 301) 
    } 
} 

func main() { 
    for key, target := range urlMap { 
     http.HandleFunc("/" + key, redirectHandler(target)) 
    } 

    http.ListenAndServe(":80", nil) 
} 

但是,我寧願依賴像nginx這樣的工具,因爲joewhite86已經提出了。

+0

我同意nginx,這是我將使用。不過,我也會看看你的解決方案,因爲我需要更嚴肅地考慮Go! – user983716