Skip to content

Commit 9c4912a

Browse files
authored
De-duplicate base headers if specified by user (#3249)
Problem: If a user set a header in a header filter that had a default value set by NGF, both values would end up being set. Solution: If provided by a user, don't set the default header value.
1 parent 60b6b19 commit 9c4912a

File tree

2 files changed

+58
-1
lines changed

2 files changed

+58
-1
lines changed

internal/mode/static/nginx/config/servers.go

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import (
44
"encoding/json"
55
"fmt"
66
"maps"
7+
"slices"
78
"strconv"
89
"strings"
910
gotemplate "text/template"
@@ -812,7 +813,15 @@ func generateProxySetHeaders(
812813
})
813814
}
814815

815-
return append(proxySetHeaders, baseHeaders...)
816+
for _, header := range baseHeaders {
817+
if !slices.ContainsFunc(proxySetHeaders, func(h http.Header) bool {
818+
return header.Name == h.Name
819+
}) {
820+
proxySetHeaders = append(proxySetHeaders, header)
821+
}
822+
}
823+
824+
return proxySetHeaders
816825
}
817826

818827
func generateResponseHeaders(filters *dataplane.HTTPFilters) http.ResponseHeaders {

internal/mode/static/nginx/config/servers_test.go

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3146,6 +3146,54 @@ func TestGenerateProxySetHeaders(t *testing.T) {
31463146
}, httpBaseHeaders...),
31473147
baseHeaders: httpBaseHeaders,
31483148
},
3149+
{
3150+
msg: "header filter overwrite base header",
3151+
filters: &dataplane.HTTPFilters{
3152+
RequestHeaderModifiers: &dataplane.HTTPHeaderFilter{
3153+
Set: []dataplane.HTTPHeader{
3154+
{
3155+
Name: "X-Forwarded-Proto",
3156+
Value: "new-proto",
3157+
},
3158+
},
3159+
},
3160+
},
3161+
expectedHeaders: []http.Header{
3162+
{
3163+
Name: "X-Forwarded-Proto",
3164+
Value: "new-proto",
3165+
},
3166+
{
3167+
Name: "Host",
3168+
Value: "$gw_api_compliant_host",
3169+
},
3170+
{
3171+
Name: "X-Forwarded-For",
3172+
Value: "$proxy_add_x_forwarded_for",
3173+
},
3174+
{
3175+
Name: "X-Real-IP",
3176+
Value: "$remote_addr",
3177+
},
3178+
{
3179+
Name: "X-Forwarded-Host",
3180+
Value: "$host",
3181+
},
3182+
{
3183+
Name: "X-Forwarded-Port",
3184+
Value: "$server_port",
3185+
},
3186+
{
3187+
Name: "Upgrade",
3188+
Value: "$http_upgrade",
3189+
},
3190+
{
3191+
Name: "Connection",
3192+
Value: "$connection_upgrade",
3193+
},
3194+
},
3195+
baseHeaders: httpBaseHeaders,
3196+
},
31493197
{
31503198
msg: "with url rewrite hostname",
31513199
filters: &dataplane.HTTPFilters{

0 commit comments

Comments
 (0)