2013-07-09 647 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