- cmd/lerproxy/reverse/proxy.go - Reorganized imports for logical grouping. - cmd/lerproxy/main.go - Added URL rewriting capability and updated command-line usage documentation. - Reorganized imports for consistency. - Replaced `context.T` with `context.Context` for standardization. - Updated timeout handling logic to use `context.WithTimeout`. - pkg/protocol/ws/connection.go - Replaced `fmt.Errorf` with `errorf.E` for error formatting. - cmd/lerproxy/util/util.go - Renamed file for better clarity. - Removed unnecessary package documentation. - cmd/lerproxy/hsts/proxy.go - Removed redundant package comments. - cmd/lerproxy/tcpkeepalive/listener.go - Removed redundant package comments. - Adjusted import order. - cmd/lerproxy/buf/bufpool.go - Removed unnecessary package comments. - cmd/lerproxy/README.md - Updated package usage examples and installation instructions. - Removed outdated and unnecessary instructions.
34 lines
922 B
Go
34 lines
922 B
Go
package reverse
|
|
|
|
import (
|
|
"net/http"
|
|
"net/http/httputil"
|
|
"net/url"
|
|
"orly.dev/pkg/utils/log"
|
|
|
|
"orly.dev/cmd/lerproxy/util"
|
|
)
|
|
|
|
// NewSingleHostReverseProxy is a copy of httputil.NewSingleHostReverseProxy
|
|
// with addition of "X-Forwarded-Proto" header.
|
|
func NewSingleHostReverseProxy(target *url.URL) (rp *httputil.ReverseProxy) {
|
|
targetQuery := target.RawQuery
|
|
director := func(req *http.Request) {
|
|
log.D.S(req)
|
|
req.URL.Scheme = target.Scheme
|
|
req.URL.Host = target.Host
|
|
req.URL.Path = util.SingleJoiningSlash(target.Path, req.URL.Path)
|
|
if targetQuery == "" || req.URL.RawQuery == "" {
|
|
req.URL.RawQuery = targetQuery + req.URL.RawQuery
|
|
} else {
|
|
req.URL.RawQuery = targetQuery + "&" + req.URL.RawQuery
|
|
}
|
|
if _, ok := req.Header["User-Agent"]; !ok {
|
|
req.Header.Set("User-Agent", "")
|
|
}
|
|
req.Header.Set("X-Forwarded-Proto", "https")
|
|
}
|
|
rp = &httputil.ReverseProxy{Director: director}
|
|
return
|
|
}
|