aboutsummaryrefslogtreecommitdiff
path: root/route.go
diff options
context:
space:
mode:
Diffstat (limited to 'route.go')
-rw-r--r--route.go17
1 files changed, 16 insertions, 1 deletions
diff --git a/route.go b/route.go
index 1440546..67b3c88 100644
--- a/route.go
+++ b/route.go
@@ -29,6 +29,15 @@ func (r Route) GetCertificate(h *tls.ClientHelloInfo) (*tls.Certificate, error)
return nil, errors.New("no cert for " + h.ServerName)
}
+func NewReverseProxy(target *url.URL) *httputil.ReverseProxy {
+ director := func(req *http.Request) {
+ //log.Println("director", req)
+ req.URL.Scheme = target.Scheme
+ req.URL.Host = target.Host
+ }
+ return &httputil.ReverseProxy{Director: director}
+}
+
// Restore and update routes from in-memory state
func (r Route) Restore() error {
mux := http.NewServeMux()
@@ -48,7 +57,13 @@ func (r Route) Restore() error {
if !strings.HasSuffix(v.ServerName, "/") {
v.ServerName += "/"
}
- mux.Handle(v.ServerName, httputil.NewSingleHostReverseProxy(up))
+ //mux.Handle(v.ServerName, httputil.NewSingleHostReverseProxy(up))
+ switch up.Scheme {
+ case "ws":
+ mux.Handle(v.ServerName, NewWebSocketProxy(up))
+ default:
+ mux.Handle(v.ServerName, NewReverseProxy(up))
+ }
}
server.Handler = mux
return nil