You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Requests that reach the final server contain the Host header from the original request. If the destination server checks the header Host (eg: ingress in k8s cluster with Host rules) and if the values do not match, then the request is rejected or etc...
Checklist
Dependencies installed
No typos
Searched existing issues and docs
Expected behaviour
proxy replace request.Host to target.URL.Host
Actual behaviour
request.Host stay immutable
Steps to reproduce
http server which checks Host header (srv1)
http server with echo using middleware proxy (proxy) - target url to srv1, domain for proxy <> domain for srv1
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.
typecustomRoundTripperstruct {
Hoststring
}
func (c*customRoundTripper) RoundTrip(r*http.Request) (*http.Response, error) {
r.Host=c.Hostreturnhttp.DefaultTransport.RoundTrip(r)
}
funcsetupHttp() {
url1, err:=url.Parse("http://minio-s3:9000")
iferr!=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 /miniog:=echo.Group("/minio")
g.Use(middleware.ProxyWithConfig(middleware.ProxyConfig{
Balancer: middleware.NewRoundRobinBalancer(targets),
// Strip out the /minioRewrite: map[string]string{"/minio/*": "/$1"},
Transport: &customRoundTripper{s.logger, s.cfg.S3.URL},
}))
}
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: