Я хочу обслуживать два или более веб-приложений, работающих в виртуальной машине (разные порты и некоторое время в разных каталогах под одним и тем же портом) с главной машины, и потому, что мне нужно, чтобы пользователь регистрировался до он может получить доступ к этим приложениям, я не могу использовать статический прокси-сервер, такой как Nginx или Apache.Обратный прокси-сервер Golang с несколькими приложениями
Так вот моя ситуация:
192.168.1.1: является хозяином IP
192.168.1.2: это VM IP
Внутри VM у меня есть это:
192.168.1.2/owncloud: owncloud адрес
192.168.1.2:8080: другое приложение
.168.1.2:8888: третье приложение
Я хочу, чтобы это:
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)
}
}
Edit:
Я изменил адрес В.М. IP: 192.168.1.2 не 192.168.1.1
На самом деле, это лучшее решение для моих нужд. Спасибо за помощь ! – Amine
Я также должен был сказать, что, слушая порт 80 (и, таким образом, запуская его как root), вы также должны изменить идентификатор пользователя и идентификатор группы в случае обнаружения и использования уязвимости: 'err = syscall .Setgid (daemon_group_id); err = syscall.Setuid (daemon_user_id) ' – Laurence