Golang-reverse-proxy mit mehreren apps

Will ich dienen, zwei oder mehr web-Anwendungen laufen in einer VM (verschiedene ports und einige Zeit in ein anderes Verzeichnis unter dem gleichen port) von dem host-Rechner und da Brauch ich den Benutzer angemeldet werden, bevor er Zugriff auf diese apps kann ich nicht verwenden, eine statische proxy wie Nginx oder Apache.

So, hier ist meine situation :

192.168.1.1 : ist die host-ip

192.168.1.2 : ist die VM-ip -

Innerhalb der VM habe ich dieses :

192.168.1.2/owncloud : owncloud-Adresse

192.168.1.2:8080 : eine andere app

192.168.1.2:8888 : 3. app

Ich will diese :

192.168.1.1/app1 --> 192.168.1.2/owncloud

192.168.1.1/app2 --> 192.168.1.2:8080

192.168.1.1/app2 --> 192.168.1.2:8888

Habe ich versucht, golang httputil.ReverseProxy um dies zu erreichen routing, aber ohne viel Erfolg:
mein code basiert auf dieser Arbeit : gist

package main

import(
    "log"
    "net/url"
    "net/http"
    "net/http/httputil"
)

func main() {
    remote, err := url.Parse("http://192.168.1.2:8080")
    if err != nil {
            panic(err)
    }

    proxy := httputil.NewSingleHostReverseProxy(remote)
    http.HandleFunc("/app2", handler(proxy))
    err = http.ListenAndServe(":80", nil)
    if err != nil {
            panic(err)
    }
}

func handler(p *httputil.ReverseProxy) func(http.ResponseWriter, *http.Request) {
    return func(w http.ResponseWriter, r *http.Request) {
        log.Println(r.URL)
        r.URL.Path = "/"                
            p.ServeHTTP(w, r)
    }
}

Edit :

Ich habe verändert die vm-ip-Adresse: 192.168.1.2 nicht 192.168.1.1

InformationsquelleAutor Amine | 2014-01-10
Schreibe einen Kommentar