2017-08-18 7 views
1

ナイーブリバースプロキシは、このようなものです:goで完全なHTTPリバースプロキシを構築するためには何が必要ですか?

package main 

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

func main() { 
    // New functionality written in Go 
    http.HandleFunc("/new", func(w http.ResponseWriter, r *http.Request) { 
     fmt.Fprint(w, "New function") 
    }) 

    // Anything we don't do in Go, we pass to the old platform 
    u, _ := url.Parse("http://www.google.com/") 
    http.Handle("/", httputil.NewSingleHostReverseProxy(u)) 

    // Start the server 
    http.ListenAndServe(":8080", nil) 
} 

しかし、これは不完全です。ウェブサイトによっては、何も役立たないかもしれません。 httpsリダイレクトを行うものもあります。直接のIPアクセスについて不平を言う人もいます。私は仮想ホストが動作しないと思う?わからない。

真のリバースプロキシが完了すると、何が行われますか?

+1

難しい点は、RPがあなたのアプリケーションサーバーの前に座っているようなものではないことが、RPをGoogleをミラーリングするための行動(あなたの例では、ホストヘッダーとフォローリダイレクトを設定するなど)キャッシュする、静的コンテンツを配信する、DoS攻撃をフィルタリングする、など)。あなたのアプリにとって何がうまくいかないかを知るまで、あなたが必要とするものを直感的に理解するのは難しいかもしれません。 – twotwotwo

+1

このプロジェクトをチェックすると、おそらくhttps://slashquery.com – nbari

答えて

2

Goで逆方向HTTPプロキシを実装する最も簡単な方法は、標準ライブラリのhttputil.ReverseProxyタイプです。

これにより、着信要求を変更できるDirector機能と、Transport機能を設定して、オンザフライで要求や応答を変更できるようになります。

リバースプロキシの大部分の状況を処理できるはずです。私は私のプロジェクトで大きな成功を収めています。

関連する問題