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}}