diff --git a/hostsplitter.go b/hostsplitter.go index 4d6b232..1ca5ea2 100644 --- a/hostsplitter.go +++ b/hostsplitter.go @@ -53,20 +53,29 @@ func main() { go SignalHandler() - fmt.Println(http.ListenAndServe(*bindAddr, &httputil.ReverseProxy{ - Director: func(r *http.Request) { - if i, ok := routedHostnames[string(r.Host)]; ok { - r.Header.Set("X-Hostsplitter-Secret", Sites[i].Secret) - r.Header.Set("Host", r.Host) - r.URL.Scheme = "http" - r.URL.Host = Sites[i].GetBackend() - r.RequestURI = "" - HTTPLogger(r, http.StatusOK) - } else { - HTTPLogger(r, http.StatusBadRequest) - } - }, - })) + r := new(revProx) + fmt.Println(http.ListenAndServe(*bindAddr, r)) +} + +type revProx struct{} + +func (p *revProx) ServeHTTP(w http.ResponseWriter, r *http.Request) { + if i, ok := routedHostnames[string(r.Host)]; ok { + reverseProxy := new(httputil.ReverseProxy) + reverseProxy.Director = func(r *http.Request) { + r.Header.Set("X-Hostsplitter-Secret", Sites[i].Secret) + r.Header.Set("Host", r.Host) + r.URL.Scheme = "http" + r.URL.Host = Sites[i].GetBackend() + r.RequestURI = "" + HTTPLogger(r, http.StatusOK) + } + reverseProxy.ServeHTTP(w, r) + } else { + HTTPLogger(r, http.StatusBadRequest) + w.WriteHeader(http.StatusBadRequest) + w.Write([]byte("Bad Request")) + } } const apacheFormatPattern = "%s - - [%s] \"%s %s %s\" %d %d \"%s\" \"%s\" %.4f\n"