Skip to content

Commit

Permalink
Add support for add_headers
Browse files Browse the repository at this point in the history
  • Loading branch information
n1koo committed Jul 10, 2017
1 parent c1e7c7a commit 02832de
Show file tree
Hide file tree
Showing 3 changed files with 26 additions and 2 deletions.
13 changes: 13 additions & 0 deletions controllers/nginx/pkg/cmd/controller/nginx.go
Original file line number Diff line number Diff line change
Expand Up @@ -479,6 +479,18 @@ func (n *NGINXController) OnUpdate(ingressCfg ingress.Configuration) error {
}
}

addHeaders := map[string]string{}
if cfg.AddHeaders != "" {
cmap, exists, err := n.storeLister.ConfigMap.GetByKey(cfg.AddHeaders)
if err != nil {
glog.Warningf("unexpected error reading configmap %v: %v", cfg.AddHeaders, err)
}

if exists {
addHeaders = cmap.(*api_v1.ConfigMap).Data
}
}

sslDHParam := ""
if cfg.SSLDHParam != "" {
secretName := cfg.SSLDHParam
Expand Down Expand Up @@ -507,6 +519,7 @@ func (n *NGINXController) OnUpdate(ingressCfg ingress.Configuration) error {

content, err := n.t.Write(config.TemplateConfig{
ProxySetHeaders: setHeaders,
AddHeaders: addHeaders,
MaxOpenFiles: maxOpenFiles,
BacklogSize: sysctlSomaxconn(),
Backends: ingressCfg.Backends,
Expand Down
6 changes: 5 additions & 1 deletion controllers/nginx/pkg/config/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -83,6 +83,9 @@ const (
type Configuration struct {
defaults.Backend `json:",squash"`

// Sets the name of the configmap that contains the headers to pass to the client
AddHeaders string `json:"add-headers,omitempty"`

// AllowBackendServerHeader enables the return of the header Server from the backend
// instead of the generic nginx string.
// http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_hide_header
Expand Down Expand Up @@ -368,7 +371,7 @@ func NewDefault() Configuration {
SkipAccessLogURLs: []string{},
},
UpstreamKeepaliveConnections: 0,
LimitConnZoneVariable: defaultLimitConnZoneVariable,
LimitConnZoneVariable: defaultLimitConnZoneVariable,
}

if glog.V(5) {
Expand All @@ -392,6 +395,7 @@ func (cfg Configuration) BuildLogFormatUpstream() string {
// TemplateConfig contains the nginx configuration to render the file nginx.conf
type TemplateConfig struct {
ProxySetHeaders map[string]string
AddHeaders map[string]string
MaxOpenFiles int
BacklogSize int
Backends []*ingress.Backend
Expand Down
9 changes: 8 additions & 1 deletion controllers/nginx/rootfs/etc/nginx/template/nginx.tmpl
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
{{ $healthzURI := .HealthzURI }}
{{ $backends := .Backends }}
{{ $proxyHeaders := .ProxySetHeaders }}
{{ $addHeaders := .AddHeaders }}
daemon off;

worker_processes {{ $cfg.WorkerProcesses }};
Expand Down Expand Up @@ -92,6 +93,11 @@ http {
gzip_proxied any;
{{ end }}

# Custom headers for response
{{ range $k, $v := $addHeaders }}
add_header {{ $k }} "{{ $v }}";
{{ end }}

server_tokens {{ if $cfg.ShowServerTokens }}on{{ else }}off{{ end }};

# disable warnings
Expand Down Expand Up @@ -324,6 +330,7 @@ http {
return 302 {{ $location.Redirect.AppRoot }};
}
{{ end }}

{{ if not (empty $authPath) }}
location = {{ $authPath }} {
internal;
Expand Down Expand Up @@ -427,7 +434,7 @@ http {
# https://www.nginx.com/blog/mitigating-the-httpoxy-vulnerability-with-nginx/
proxy_set_header Proxy "";

# Custom headers
# Custom headers to proxied server
{{ range $k, $v := $proxyHeaders }}
proxy_set_header {{ $k }} "{{ $v }}";
{{ end }}
Expand Down

0 comments on commit 02832de

Please sign in to comment.