-
-
Notifications
You must be signed in to change notification settings - Fork 2.2k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
middleware proxy pass origin Host header #2647
Comments
You can do this right now by adding a custom Transport. Here is an example where I had to Reverse Proxy for minio presigned urls to work when minio is running in k8s. type customRoundTripper struct {
Host string
}
func (c *customRoundTripper) RoundTrip(r *http.Request) (*http.Response, error) {
r.Host = c.Host
return http.DefaultTransport.RoundTrip(r)
}
func setupHttp() {
url1, err := url.Parse("http://minio-s3:9000")
if err != nil {
log.Fatal().Err(err).Msg("failed to parse url")
}
targets := []*middleware.ProxyTarget{
{
URL: url1,
},
}
// We need to change the host by using a custom http.RoundTripper
// Use a group to proxy path /minio
g := echo.Group("/minio")
g.Use(middleware.ProxyWithConfig(middleware.ProxyConfig{
Balancer: middleware.NewRoundRobinBalancer(targets),
// Strip out the /minio
Rewrite: map[string]string{"/minio/*": "/$1"},
Transport: &customRoundTripper{s.logger, s.cfg.S3.URL},
}))
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Issue Description
Requests that reach the final server contain the
Host
header from the original request. If the destination server checks the headerHost
(eg: ingress in k8s cluster withHost
rules) and if the values do not match, then the request is rejected or etc...Checklist
Expected behaviour
proxy replace request.Host to target.URL.Host
Actual behaviour
request.Host stay immutable
Steps to reproduce
Host
header (srv1)client (localhost) --(Host: proxy.domain.com)--> proxy (proxy.domain.com) --(Host: proxy.domain.com)--> srv1 (srv1.domain.com)
Version/commit
echo v4.12.0
dirty workaround
P.S. Maybe add option to
ProxyConfig
The text was updated successfully, but these errors were encountered: