私はGolangで単純な逆プロキシを書いています。コードは以下の通りである:Nollyxの背後にあるアプリケーションにGolangリバースプロキシ
func NewMultiHostProxy(target_urls []string) gin.HandlerFunc {
var urls []*url.URL
for i := 0; i < len(target_urls); i++ {
target, err := url.Parse(target_urls[i])
if err != nil {
fmt.Errorf("Error parsing url")
return nil
}
urls = append(urls, target)
}
return func(c *gin.Context) {
director := func(req *http.Request) {
target := urls[rand.Int()%len(urls)]
r := c.Request
req = r
req.URL.Scheme = target.Scheme
req.URL.Host = target.Host
req.URL.Path = target.Path
req.Header.Set("X-GoProxy", "GoProxy")
if target.RawQuery == "" || req.URL.RawQuery == "" {
req.URL.RawQuery = target.RawQuery + req.URL.RawQuery
} else {
req.URL.RawQuery = target.RawQuery + "&" + req.URL.RawQuery
}
log.Print(req.URL)
}
proxy := &httputil.ReverseProxy{Director: director}
proxy.ServeHTTP(c.Writer, c.Request)
}
}
私はプロキシにnginxの後ろのREST APIへの要求を1つしようとしています、nginxのはいつも私が直接REST APIにアクセスする場合、それは正確に結果を返します。しかし、404を返します。ここに私のNginxの設定です:
server {
listen 80;
server_name myservername;
location /api {
proxy_pass http://127.0.0.1:5000;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
私はこの問題をデバッグする方法を知っていますか?それはNginxの設定によって引き起こされますか? https://golang.org/pkg/net/http/httputil/#ReverseProxyから
こんにちは@cshu、返信いただきありがとうございます。私は再割り当てコードを削除しましたが、404エラーは継続します。 Nginxログには、アクセスのためのレコードがあるので、プロキシ要求はターゲットに到達できますが、nginxログには404が表示されます。 –