proxy add header process

This commit is contained in:
程广 2023-12-14 11:25:31 +08:00
parent 7f32c1a38f
commit 33c988a952
2 changed files with 34 additions and 7 deletions

View File

@ -31,12 +31,13 @@ func (p *ProxyHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
} }
// init httputil.ReverseProxy instance and add path rewrite and add session-sticky cookie to response // init httputil.ReverseProxy instance and add path rewrite and add session-sticky cookie to response
func makeProxy(upstream string, pw model.PathRewrite, index int) *httputil.ReverseProxy { func makeProxy(upstream string, path *model.HttpPath, index int) *httputil.ReverseProxy {
p := &httputil.ReverseProxy{} p := &httputil.ReverseProxy{}
p.Director = func(req *http.Request) { p.Director = func(req *http.Request) {
turl, _ := url.Parse(upstream) turl, _ := url.Parse(upstream)
req.URL.Host = turl.Host req.URL.Host = turl.Host
req.URL.Scheme = turl.Scheme req.URL.Scheme = turl.Scheme
pw := path.Rewrite
if pw.Replace != "" { if pw.Replace != "" {
req.URL.Path = strings.TrimPrefix(req.URL.Path, pw.Replace) req.URL.Path = strings.TrimPrefix(req.URL.Path, pw.Replace)
if req.URL.RawPath != "" { if req.URL.RawPath != "" {
@ -49,6 +50,20 @@ func makeProxy(upstream string, pw model.PathRewrite, index int) *httputil.Rever
req.URL.RawPath = strings.TrimSuffix(pw.With, "/") + "/" + req.URL.RawPath req.URL.RawPath = strings.TrimSuffix(pw.With, "/") + "/" + req.URL.RawPath
} }
} }
if len(path.Headers) > 0 {
for _, header := range path.Headers {
//req.Header.Add(header.Name, header.Value)
value := ""
switch header.Value {
case string(model.ProxyHost):
value = turl.Host
default:
value = header.Value
}
req.Header.Set(header.Name, value)
}
}
} }
p.ModifyResponse = func(resp *http.Response) error { p.ModifyResponse = func(resp *http.Response) error {
@ -80,7 +95,7 @@ func NewProxyHandler(p *model.HttpPath) *ProxyHandler {
ph.proxy = make([]*httputil.ReverseProxy, upstreamCount) ph.proxy = make([]*httputil.ReverseProxy, upstreamCount)
for index, upstream := range p.Upstreams { for index, upstream := range p.Upstreams {
ph.proxy[index] = makeProxy(upstream, p.Rewrite, index) ph.proxy[index] = makeProxy(upstream, p, index)
} }
return ph return ph
} }

View File

@ -9,11 +9,12 @@ import (
) )
type HttpPath struct { type HttpPath struct {
Path string `json:"path"` Path string `json:"path"`
Root string `json:"root"` Root string `json:"root"`
Default string `json:"default"` Default string `json:"default"`
Upstreams []string `json:"upstreams"` Upstreams []string `json:"upstreams"`
Rewrite PathRewrite `json:"pathrewrite"` Rewrite PathRewrite `json:"pathrewrite"`
Headers []HeaderDefine `json:"headers"`
} }
type PathRewrite struct { type PathRewrite struct {
@ -21,6 +22,17 @@ type PathRewrite struct {
With string `json:"with"` With string `json:"with"`
} }
type HeaderDefine struct {
Name string `json:"name"`
Value string `json:"value"`
}
type HeaderValueConst string
const (
ProxyHost HeaderValueConst = "$ProxyHost"
)
type HttpServerConfig struct { type HttpServerConfig struct {
Name string `json:"name"` Name string `json:"name"`
ServerName string `json:"server"` ServerName string `json:"server"`