github.com/nginxinc/kubernetes-ingress@v1.12.5/internal/configs/version1/nginx-plus.ingress.tmpl (about) 1 # configuration for {{.Ingress.Namespace}}/{{.Ingress.Name}} 2 {{range $upstream := .Upstreams}} 3 upstream {{$upstream.Name}} { 4 zone {{$upstream.Name}} {{if ne $upstream.UpstreamZoneSize "0"}}{{$upstream.UpstreamZoneSize}}{{else}}256k{{end}}; 5 {{if $upstream.LBMethod }}{{$upstream.LBMethod}};{{end}} 6 {{range $server := $upstream.UpstreamServers}} 7 server {{$server.Address}}:{{$server.Port}} max_fails={{$server.MaxFails}} fail_timeout={{$server.FailTimeout}} max_conns={{$server.MaxConns}} 8 {{- if $server.SlowStart}} slow_start={{$server.SlowStart}}{{end}}{{if $server.Resolve}} resolve{{end}};{{end}} 9 {{if $upstream.StickyCookie}} 10 sticky cookie {{$upstream.StickyCookie}}; 11 {{end}} 12 {{if $.Keepalive}}keepalive {{$.Keepalive}};{{end}} 13 {{- if $upstream.UpstreamServers -}} 14 {{- if $upstream.Queue}} 15 queue {{$upstream.Queue}} timeout={{$upstream.QueueTimeout}}s; 16 {{- end -}} 17 {{- end}} 18 } 19 {{- end}} 20 21 {{range $server := .Servers}} 22 server { 23 {{if $server.SpiffeCerts}} 24 listen 443 ssl; 25 ssl_certificate /etc/nginx/secrets/spiffe_cert.pem; 26 ssl_certificate_key /etc/nginx/secrets/spiffe_key.pem; 27 {{else}} 28 {{if not $server.GRPCOnly}} 29 {{range $port := $server.Ports}} 30 listen {{$port}}{{if $server.ProxyProtocol}} proxy_protocol{{end}}; 31 {{- end}} 32 {{end}} 33 34 {{if $server.SSL}} 35 {{if $server.TLSPassthrough}} 36 listen unix:/var/lib/nginx/passthrough-https.sock ssl{{if $server.HTTP2}} http2{{end}} proxy_protocol; 37 set_real_ip_from unix:; 38 real_ip_header proxy_protocol; 39 {{else}} 40 {{- range $port := $server.SSLPorts}} 41 listen {{$port}} ssl{{if $server.HTTP2}} http2{{end}}{{if $server.ProxyProtocol}} proxy_protocol{{end}}; 42 {{- end}} 43 {{end}} 44 {{if $server.SSLRejectHandshake}} 45 ssl_reject_handshake on; 46 {{else}} 47 ssl_certificate {{$server.SSLCertificate}}; 48 ssl_certificate_key {{$server.SSLCertificateKey}}; 49 {{end}} 50 {{end}} 51 {{end}} 52 53 {{range $setRealIPFrom := $server.SetRealIPFrom}} 54 set_real_ip_from {{$setRealIPFrom}};{{end}} 55 {{if $server.RealIPHeader}}real_ip_header {{$server.RealIPHeader}};{{end}} 56 {{if $server.RealIPRecursive}}real_ip_recursive on;{{end}} 57 58 server_tokens "{{$server.ServerTokens}}"; 59 60 server_name {{$server.Name}}; 61 62 status_zone {{$server.StatusZone}}; 63 set $resource_type "ingress"; 64 set $resource_name "{{$.Ingress.Name}}"; 65 set $resource_namespace "{{$.Ingress.Namespace}}"; 66 67 {{- if $server.AppProtectEnable}} 68 app_protect_enable {{$server.AppProtectEnable}}; 69 {{if $server.AppProtectPolicy}}app_protect_policy_file {{$server.AppProtectPolicy}};{{end}} 70 {{- end}} 71 {{- if $server.AppProtectLogEnable}} 72 app_protect_security_log_enable {{$server.AppProtectLogEnable}}; 73 {{range $AppProtectLogConf := $server.AppProtectLogConfs}}app_protect_security_log {{$AppProtectLogConf}}; 74 {{end}} 75 {{- end}} 76 77 {{if not $server.GRPCOnly}} 78 {{range $proxyHideHeader := $server.ProxyHideHeaders}} 79 proxy_hide_header {{$proxyHideHeader}};{{end}} 80 {{range $proxyPassHeader := $server.ProxyPassHeaders}} 81 proxy_pass_header {{$proxyPassHeader}};{{end}} 82 {{end}} 83 84 {{- if and $server.HSTS (or $server.SSL $server.HSTSBehindProxy)}} 85 set $hsts_header_val ""; 86 proxy_hide_header Strict-Transport-Security; 87 {{- if $server.HSTSBehindProxy}} 88 if ($http_x_forwarded_proto = 'https') { 89 {{else}} 90 if ($https = on) { 91 {{- end}} 92 set $hsts_header_val "max-age={{$server.HSTSMaxAge}}; {{if $server.HSTSIncludeSubdomains}}includeSubDomains; {{end}}preload"; 93 } 94 95 add_header Strict-Transport-Security "$hsts_header_val" always; 96 {{end}} 97 98 {{if $server.SSL}} 99 {{if not $server.GRPCOnly}} 100 {{- if $server.SSLRedirect}} 101 if ($scheme = http) { 102 return 301 https://$host:{{index $server.SSLPorts 0}}$request_uri; 103 } 104 {{- end}} 105 {{end}} 106 {{- end}} 107 108 {{- if $server.RedirectToHTTPS}} 109 if ($http_x_forwarded_proto = 'http') { 110 return 301 https://$host$request_uri; 111 } 112 {{- end}} 113 114 {{with $jwt := $server.JWTAuth}} 115 auth_jwt_key_file {{$jwt.Key}}; 116 auth_jwt "{{.Realm}}"{{if $jwt.Token}} token={{$jwt.Token}}{{end}}; 117 118 {{- if $jwt.RedirectLocationName}} 119 error_page 401 {{$jwt.RedirectLocationName}}; 120 {{end}} 121 {{end}} 122 123 {{- if $server.ServerSnippets}} 124 {{range $value := $server.ServerSnippets}} 125 {{$value}}{{end}} 126 {{- end}} 127 128 {{- range $healthCheck := $server.HealthChecks}} 129 location @hc-{{$healthCheck.UpstreamName}} { 130 {{- range $name, $header := $healthCheck.Headers}} 131 proxy_set_header {{$name}} "{{$header}}"; 132 {{- end }} 133 proxy_connect_timeout {{$healthCheck.TimeoutSeconds}}s; 134 proxy_read_timeout {{$healthCheck.TimeoutSeconds}}s; 135 proxy_send_timeout {{$healthCheck.TimeoutSeconds}}s; 136 proxy_pass {{$healthCheck.Scheme}}://{{$healthCheck.UpstreamName}}; 137 health_check {{if $healthCheck.Mandatory}}mandatory {{end}}uri={{$healthCheck.URI}} interval= 138 {{- $healthCheck.Interval}}s fails={{$healthCheck.Fails}} passes={{$healthCheck.Passes}}; 139 } 140 {{end -}} 141 142 {{- range $location := $server.JWTRedirectLocations}} 143 location {{$location.Name}} { 144 internal; 145 return 302 {{$location.LoginURL}}; 146 } 147 {{end -}} 148 149 {{range $location := $server.Locations}} 150 location {{$location.Path}} { 151 set $service "{{$location.ServiceName}}"; 152 {{with $location.MinionIngress}} 153 # location for minion {{$location.MinionIngress.Namespace}}/{{$location.MinionIngress.Name}} 154 set $resource_name "{{$location.MinionIngress.Name}}"; 155 set $resource_namespace "{{$location.MinionIngress.Namespace}}"; 156 {{end}} 157 {{if $location.GRPC}} 158 {{if not $server.GRPCOnly}} 159 error_page 400 @grpcerror400; 160 error_page 401 @grpcerror401; 161 error_page 403 @grpcerror403; 162 error_page 404 @grpcerror404; 163 error_page 405 @grpcerror405; 164 error_page 408 @grpcerror408; 165 error_page 414 @grpcerror414; 166 error_page 426 @grpcerror426; 167 error_page 500 @grpcerror500; 168 error_page 501 @grpcerror501; 169 error_page 502 @grpcerror502; 170 error_page 503 @grpcerror503; 171 error_page 504 @grpcerror504; 172 {{end}} 173 174 {{- if $location.LocationSnippets}} 175 {{range $value := $location.LocationSnippets}} 176 {{$value}}{{end}} 177 {{- end}} 178 179 {{with $jwt := $location.JWTAuth}} 180 auth_jwt_key_file {{$jwt.Key}}; 181 auth_jwt "{{.Realm}}"{{if $jwt.Token}} token={{$jwt.Token}}{{end}}; 182 {{end}} 183 184 grpc_connect_timeout {{$location.ProxyConnectTimeout}}; 185 grpc_read_timeout {{$location.ProxyReadTimeout}}; 186 grpc_send_timeout {{$location.ProxySendTimeout}}; 187 grpc_set_header Host $host; 188 grpc_set_header X-Real-IP $remote_addr; 189 grpc_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 190 grpc_set_header X-Forwarded-Host $host; 191 grpc_set_header X-Forwarded-Port $server_port; 192 grpc_set_header X-Forwarded-Proto $scheme; 193 194 {{- if $location.ProxyBufferSize}} 195 grpc_buffer_size {{$location.ProxyBufferSize}}; 196 {{- end}} 197 {{if $.SpiffeClientCerts}} 198 grpc_ssl_certificate /etc/nginx/secrets/spiffe_cert.pem; 199 grpc_ssl_certificate_key /etc/nginx/secrets/spiffe_key.pem; 200 grpc_ssl_trusted_certificate /etc/nginx/secrets/spiffe_rootca.pem; 201 grpc_ssl_server_name on; 202 grpc_ssl_verify on; 203 grpc_ssl_verify_depth 25; 204 grpc_ssl_name {{$location.ProxySSLName}}; 205 {{end}} 206 {{if $location.SSL}} 207 grpc_pass grpcs://{{$location.Upstream.Name}}; 208 {{else}} 209 grpc_pass grpc://{{$location.Upstream.Name}}; 210 {{end}} 211 {{else}} 212 proxy_http_version 1.1; 213 {{if $location.Websocket}} 214 proxy_set_header Upgrade $http_upgrade; 215 proxy_set_header Connection $connection_upgrade; 216 {{- else}} 217 {{- if $.Keepalive}}proxy_set_header Connection "";{{end}} 218 {{- end}} 219 220 {{- if $location.LocationSnippets}} 221 {{range $value := $location.LocationSnippets}} 222 {{$value}}{{end}} 223 {{- end}} 224 225 {{ with $jwt := $location.JWTAuth }} 226 auth_jwt_key_file {{$jwt.Key}}; 227 auth_jwt "{{.Realm}}"{{if $jwt.Token}} token={{$jwt.Token}}{{end}}; 228 {{if $jwt.RedirectLocationName}} 229 error_page 401 {{$jwt.RedirectLocationName}}; 230 {{end}} 231 {{end}} 232 233 proxy_connect_timeout {{$location.ProxyConnectTimeout}}; 234 proxy_read_timeout {{$location.ProxyReadTimeout}}; 235 proxy_send_timeout {{$location.ProxySendTimeout}}; 236 client_max_body_size {{$location.ClientMaxBodySize}}; 237 proxy_set_header Host $host; 238 proxy_set_header X-Real-IP $remote_addr; 239 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 240 proxy_set_header X-Forwarded-Host $host; 241 proxy_set_header X-Forwarded-Port $server_port; 242 proxy_set_header X-Forwarded-Proto {{if $server.RedirectToHTTPS}}https{{else}}$scheme{{end}}; 243 proxy_buffering {{if $location.ProxyBuffering}}on{{else}}off{{end}}; 244 {{- if $location.ProxyBuffers}} 245 proxy_buffers {{$location.ProxyBuffers}}; 246 {{- end}} 247 {{- if $location.ProxyBufferSize}} 248 proxy_buffer_size {{$location.ProxyBufferSize}}; 249 {{- end}} 250 {{- if $location.ProxyMaxTempFileSize}} 251 proxy_max_temp_file_size {{$location.ProxyMaxTempFileSize}}; 252 {{- end}} 253 {{if $.SpiffeClientCerts}} 254 proxy_ssl_certificate /etc/nginx/secrets/spiffe_cert.pem; 255 proxy_ssl_certificate_key /etc/nginx/secrets/spiffe_key.pem; 256 proxy_ssl_trusted_certificate /etc/nginx/secrets/spiffe_rootca.pem; 257 proxy_ssl_server_name on; 258 proxy_ssl_verify on; 259 proxy_ssl_verify_depth 25; 260 proxy_ssl_name {{$location.ProxySSLName}}; 261 {{end}} 262 {{if $location.SSL}} 263 proxy_pass https://{{$location.Upstream.Name}}{{$location.Rewrite}}; 264 {{else}} 265 proxy_pass http://{{$location.Upstream.Name}}{{$location.Rewrite}}; 266 {{end}} 267 {{end}} 268 }{{end}} 269 {{if $server.GRPCOnly}} 270 error_page 400 @grpcerror400; 271 error_page 401 @grpcerror401; 272 error_page 403 @grpcerror403; 273 error_page 404 @grpcerror404; 274 error_page 405 @grpcerror405; 275 error_page 408 @grpcerror408; 276 error_page 414 @grpcerror414; 277 error_page 426 @grpcerror426; 278 error_page 500 @grpcerror500; 279 error_page 501 @grpcerror501; 280 error_page 502 @grpcerror502; 281 error_page 503 @grpcerror503; 282 error_page 504 @grpcerror504; 283 {{end}} 284 {{if $server.HTTP2}} 285 location @grpcerror400 { default_type application/grpc; return 400 "\n"; } 286 location @grpcerror401 { default_type application/grpc; return 401 "\n"; } 287 location @grpcerror403 { default_type application/grpc; return 403 "\n"; } 288 location @grpcerror404 { default_type application/grpc; return 404 "\n"; } 289 location @grpcerror405 { default_type application/grpc; return 405 "\n"; } 290 location @grpcerror408 { default_type application/grpc; return 408 "\n"; } 291 location @grpcerror414 { default_type application/grpc; return 414 "\n"; } 292 location @grpcerror426 { default_type application/grpc; return 426 "\n"; } 293 location @grpcerror500 { default_type application/grpc; return 500 "\n"; } 294 location @grpcerror501 { default_type application/grpc; return 501 "\n"; } 295 location @grpcerror502 { default_type application/grpc; return 502 "\n"; } 296 location @grpcerror503 { default_type application/grpc; return 503 "\n"; } 297 location @grpcerror504 { default_type application/grpc; return 504 "\n"; } 298 {{end}} 299 }{{end}}