13

ホスト マシンから 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

4

3 に答える 3

4

URL ではなくホスト名でこれを行う方がよいでしょう。例えば

owncloud.domain.com -> IP 192.168.1.2,
app2.domain.com     -> IP 192.168.1.3

ホスト名は単なる HTTP リクエスト ヘッダー (Host: domain.com) であるため、IP ごとに複数のホスト名を指定できます (Apache ではこれを「名前付き仮想ホスト」と呼びます)。

URL ではなくホスト名を使用する利点は、相手側の Web アプリが、接頭辞を付けた URL を認識する必要がないことです。リバース プロキシが期待する URL に対して動作します。ほとんどのWebアプリはドメイン名を書き換えないため、ホスト名ベースのプロキシは機能するはずです。(ただし、これは非常に一般化したものです。一部の Web アプリでは、プロキシ アドレスを追加できますが、通常は、ホスト名に関する問題はほとんど発生しません)

最大の問題は、ネーム サーバーにサブドメインを設定する必要があることです。私はあなたのレジストラ/DNS プロバイダーがサブドメインを無料で作成できると仮定しています (ほとんどの場合そうすべきです)。動的DNSアドレスにCNAMEされたサブドメインを持つ独自のドメイン名を購入する(または動的DNSプロバイダーがサブドメインを提供する場合は、動的DNSプロバイダーの有料アカウントを使用する).

最後に、owncloud を検討している場合は、Pydio (正式には AjaxExplore) も検討することをお勧めします。どちらも長所と短所が異なりますが、私の個人的な意見では、Pydio の方が優れた製品です。

于 2014-01-18T17:00:40.450 に答える
1

間違った IP をリバース プロキシに渡します。VM の である必要があります192.168.1.2

ドキュメント

NewSingleHostReverseProxy returns a new ReverseProxy that rewrites URLs to the scheme, host, and base path provided in target.

于 2014-01-13T11:38:46.653 に答える