Я пытаюсь написать обратный прокси-сервер в Golang, используя net/httputil/ReverseProxy
, который может пересылать запросы на разные целевые URL-адреса без добавления подпутей URL-адреса прокси.
Например: если мой прокси-URL-адрес - PROXYURL,(недостаточно репутации, чтобы публиковать более 8 ссылок, даже поддельных, например, поэтому заменив ссылку на PROXYURL),
Я бы хотел PROXYURL/app1
для пересылки запросов на TARGET1/directory
и PROXYURL/app2
для переадресации на TARGET2/directory2
В настоящее время я создаю следующие http-обработчики ReverseProxy с использованием NewSingleHostReverseProxy()
и привязываю их к нужным подпутям (/app1
и /app2
).
import (
"fmt"
"net/http"
"net/http/httputil"
)
func main() {
port := "6666"
proxy1 = httputil.NewSingleHostReverseProxy("http://target1.com/directory")
proxy2 = httputil.NewSingleHostReverseProxy("http://target2.com/directory2")
http.Handle("/app1", proxy1)
http.Handle("/app2", proxy2)
http.ListenAndServe(fmt.Sprintf(":%s", port), nil)
}
Однако всякий раз, когда я запускаю это и отправляю запрос на PROXYURL/app1
, он прокси TARGET1/directory/app1
.Я понимаю, что из описания ReverseProxy это предполагаемое поведение (добавление подпути URL прокси к цели).Однако мне было интересно, можно ли сопоставить подпуть URL-адреса прокси-сервера (/app1
) с другим целевым URL-адресом без добавления подпути к целевому URL-адресу.
В итоге я хочу
http://proxy.com/app1 -> http://target1.com/directory
и
http://proxy.com/app2 -> http://target2.com/directory2
нет (как сейчас происходит)
http://proxy.com/app1 -> http://target1.com/directory/app1
и
http://proxy.com/app2 -> http://target2.com/directory2/app2