0
Fork 0
mirror of https://github.com/caddyserver/caddy.git synced 2024-12-23 22:27:38 -05:00

Merge pull request #345 from tw4452852/my_proxy

proxy: make http header block scoped
This commit is contained in:
Matt Holt 2015-11-17 08:20:29 -07:00
commit 280ba9db85
2 changed files with 17 additions and 14 deletions

View file

@ -98,11 +98,6 @@ func TestWebSocketReverseProxyFromWSClient(t *testing.T) {
// also sets up the rules/environment for testing WebSocket // also sets up the rules/environment for testing WebSocket
// proxy. // proxy.
func newWebSocketTestProxy(backendAddr string) *Proxy { func newWebSocketTestProxy(backendAddr string) *Proxy {
proxyHeaders = http.Header{
"Connection": {"{>Connection}"},
"Upgrade": {"{>Upgrade}"},
}
return &Proxy{ return &Proxy{
Upstreams: []Upstream{&fakeUpstream{name: backendAddr}}, Upstreams: []Upstream{&fakeUpstream{name: backendAddr}},
} }
@ -121,7 +116,9 @@ func (u *fakeUpstream) Select() *UpstreamHost {
return &UpstreamHost{ return &UpstreamHost{
Name: u.name, Name: u.name,
ReverseProxy: NewSingleHostReverseProxy(uri, ""), ReverseProxy: NewSingleHostReverseProxy(uri, ""),
ExtraHeaders: proxyHeaders, ExtraHeaders: http.Header{
"Connection": {"{>Connection}"},
"Upgrade": {"{>Upgrade}"}},
} }
} }

View file

@ -16,13 +16,13 @@ import (
var ( var (
supportedPolicies = make(map[string]func() Policy) supportedPolicies = make(map[string]func() Policy)
proxyHeaders = make(http.Header)
) )
type staticUpstream struct { type staticUpstream struct {
from string from string
Hosts HostPool proxyHeaders http.Header
Policy Policy Hosts HostPool
Policy Policy
FailTimeout time.Duration FailTimeout time.Duration
MaxFails int32 MaxFails int32
@ -72,7 +72,7 @@ func NewStaticUpstreams(c parse.Dispenser) ([]Upstream, error) {
Fails: 0, Fails: 0,
FailTimeout: upstream.FailTimeout, FailTimeout: upstream.FailTimeout,
Unhealthy: false, Unhealthy: false,
ExtraHeaders: proxyHeaders, ExtraHeaders: upstream.proxyHeaders,
CheckDown: func(upstream *staticUpstream) UpstreamHostDownFunc { CheckDown: func(upstream *staticUpstream) UpstreamHostDownFunc {
return func(uh *UpstreamHost) bool { return func(uh *UpstreamHost) bool {
if uh.Unhealthy { if uh.Unhealthy {
@ -159,10 +159,16 @@ func parseBlock(c *parse.Dispenser, u *staticUpstream) error {
if !c.Args(&header, &value) { if !c.Args(&header, &value) {
return c.ArgErr() return c.ArgErr()
} }
proxyHeaders.Add(header, value) if u.proxyHeaders == nil {
u.proxyHeaders = make(http.Header)
}
u.proxyHeaders.Add(header, value)
case "websocket": case "websocket":
proxyHeaders.Add("Connection", "{>Connection}") if u.proxyHeaders == nil {
proxyHeaders.Add("Upgrade", "{>Upgrade}") u.proxyHeaders = make(http.Header)
}
u.proxyHeaders.Add("Connection", "{>Connection}")
u.proxyHeaders.Add("Upgrade", "{>Upgrade}")
case "without": case "without":
if !c.NextArg() { if !c.NextArg() {
return c.ArgErr() return c.ArgErr()