ホスト マシンから VM で実行されている 2 つ以上の Web アプリケーション (異なるポートと、同じポートの下の異なるディレクトリでしばらく) を提供したいと考えています。 Nginx や Apache などの静的プロキシ。
だからここに私の状況があります:
192.168.1.1 : ホストの IP です
192.168.1.2 : VM の IP です
VM内にはこれがあります:
192.168.1.2/owncloud : owncloud アドレス
192.168.1.2:8080 : 別のアプリ
192.168.1.2:8888 : 3 つ目のアプリ
私はこれが欲しい:
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
このルーティングを実現するために golang httputil.ReverseProxy を使用しようとしましたが、あまり成功しませんでした: 私のコードはこの作業に基づいています: 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)
}
}
編集:
VM IPアドレスを変更しました:192.168.1.1ではなく192.168.1.2