mirror of
https://github.com/thib8956/nginx-proxy
synced 2025-02-24 01:38:15 +00:00
Merge pull request #2410 from pini-gh/pini-refactor-template-3
refactor: add 'ports' dict to the data structure
This commit is contained in:
commit
94fb8459cd
124
nginx.tmpl
124
nginx.tmpl
@ -128,7 +128,7 @@
|
||||
# exposed ports:{{ range sortObjectsByKeysAsc $.container.Addresses "Port" }} {{ .Port }}/{{ .Proto }}{{ else }} (none){{ end }}
|
||||
{{- $default_port := when (eq (len $.container.Addresses) 1) (first $.container.Addresses).Port "80" }}
|
||||
# default port: {{ $default_port }}
|
||||
{{- $port := or $.container.Env.VIRTUAL_PORT $default_port }}
|
||||
{{- $port := when (eq $.port "legacy") (or $.container.Env.VIRTUAL_PORT $default_port) $.port }}
|
||||
# using port: {{ $port }}
|
||||
{{- $addr_obj := where $.container.Addresses "Port" $port | first }}
|
||||
{{- if and $addr_obj $addr_obj.HostPort }}
|
||||
@ -242,6 +242,7 @@
|
||||
{{- end }}
|
||||
|
||||
{{- define "location" }}
|
||||
{{- $vpath := .VPath }}
|
||||
{{- $override := printf "/etc/nginx/vhost.d/%s_%s_location_override" .Host (sha1 .Path) }}
|
||||
{{- if and (eq .Path "/") (not (exists $override)) }}
|
||||
{{- $override = printf "/etc/nginx/vhost.d/%s_location_override" .Host }}
|
||||
@ -249,29 +250,32 @@
|
||||
{{- if exists $override }}
|
||||
include {{ $override }};
|
||||
{{- else }}
|
||||
{{- $keepalive := coalesce (first (keys (groupByLabel .Containers "com.github.nginx-proxy.nginx-proxy.keepalive"))) "disabled" }}
|
||||
{{- $keepalive := $vpath.keepalive }}
|
||||
location {{ .Path }} {
|
||||
{{- if eq .NetworkTag "internal" }}
|
||||
{{- if eq $vpath.network_tag "internal" }}
|
||||
# Only allow traffic from internal clients
|
||||
include /etc/nginx/network_internal.conf;
|
||||
{{- end }}
|
||||
|
||||
{{- if eq .Proto "uwsgi" }}
|
||||
{{ $proto := $vpath.proto }}
|
||||
{{ $upstream := $vpath.upstream }}
|
||||
{{ $dest := $vpath.dest }}
|
||||
{{- if eq $proto "uwsgi" }}
|
||||
include uwsgi_params;
|
||||
uwsgi_pass {{ trim .Proto }}://{{ trim .Upstream }};
|
||||
{{- else if eq .Proto "fastcgi" }}
|
||||
uwsgi_pass {{ trim $proto }}://{{ trim $upstream }};
|
||||
{{- else if eq $proto "fastcgi" }}
|
||||
root {{ trim .VhostRoot }};
|
||||
include fastcgi_params;
|
||||
fastcgi_pass {{ trim .Upstream }};
|
||||
fastcgi_pass {{ trim $upstream }};
|
||||
{{- if ne $keepalive "disabled" }}
|
||||
fastcgi_keep_conn on;
|
||||
{{- end }}
|
||||
{{- else if eq .Proto "grpc" }}
|
||||
grpc_pass {{ trim .Proto }}://{{ trim .Upstream }};
|
||||
{{- else if eq .Proto "grpcs" }}
|
||||
grpc_pass {{ trim .Proto }}://{{ trim .Upstream }};
|
||||
{{- else if eq $proto "grpc" }}
|
||||
grpc_pass {{ trim $proto }}://{{ trim $upstream }};
|
||||
{{- else if eq $proto "grpcs" }}
|
||||
grpc_pass {{ trim $proto }}://{{ trim $upstream }};
|
||||
{{- else }}
|
||||
proxy_pass {{ trim .Proto }}://{{ trim .Upstream }}{{ trim .Dest }};
|
||||
proxy_pass {{ trim $proto }}://{{ trim $upstream }}{{ trim $dest }};
|
||||
set $upstream_keepalive {{ if ne $keepalive "disabled" }}true{{ else }}false{{ end }};
|
||||
{{- end }}
|
||||
|
||||
@ -295,24 +299,27 @@
|
||||
{{- end }}
|
||||
|
||||
{{- define "upstream" }}
|
||||
upstream {{ .Upstream }} {
|
||||
{{- $path := .Path }}
|
||||
{{- $vpath := .VPath }}
|
||||
upstream {{ $vpath.upstream }} {
|
||||
{{- $servers := 0 }}
|
||||
{{- $loadbalance := first (keys (groupByLabel .Containers "com.github.nginx-proxy.nginx-proxy.loadbalance")) }}
|
||||
{{- $loadbalance := $vpath.loadbalance }}
|
||||
{{- if $loadbalance }}
|
||||
# From the container's loadbalance label:
|
||||
{{ $loadbalance }}
|
||||
{{- end }}
|
||||
{{- range $container := .Containers }}
|
||||
{{- range $port, $containers := $vpath.ports }}
|
||||
{{- range $container := $containers }}
|
||||
# Container: {{ $container.Name }}
|
||||
{{- $args := dict "globals" $.globals "container" $container }}
|
||||
{{- template "container_ip" $args }}
|
||||
{{- $ip := $args.ip }}
|
||||
{{- $args := dict "container" $container }}
|
||||
{{- $args = dict "container" $container "path" $path "port" $port }}
|
||||
{{- template "container_port" $args }}
|
||||
{{- $port := $args.port }}
|
||||
{{- if $ip }}
|
||||
{{- $servers = add1 $servers }}
|
||||
server {{ $ip }}:{{ $port }};
|
||||
server {{ $ip }}:{{ $args.port }};
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
{{- /* nginx-proxy/nginx-proxy#1105 */}}
|
||||
@ -320,7 +327,7 @@ upstream {{ .Upstream }} {
|
||||
# Fallback entry
|
||||
server 127.0.0.1 down;
|
||||
{{- end }}
|
||||
{{- $keepalive := coalesce (first (keys (groupByLabel .Containers "com.github.nginx-proxy.nginx-proxy.keepalive"))) "disabled" }}
|
||||
{{- $keepalive := $vpath.keepalive }}
|
||||
{{- if and (ne $keepalive "disabled") (gt $servers 0) }}
|
||||
{{- if eq $keepalive "auto" }}
|
||||
keepalive {{ mul $servers 2 }};
|
||||
@ -331,6 +338,49 @@ upstream {{ .Upstream }} {
|
||||
}
|
||||
{{- end }}
|
||||
|
||||
{{- /*
|
||||
* Template used as a function to collect virtual path properties from
|
||||
* the given containers. These properties are "returned" by storing their
|
||||
* values into the provided dot dict.
|
||||
*
|
||||
* The provided dot dict is expected to have the following entries:
|
||||
* - "Containers": List of container's RuntimeContainer struct.
|
||||
* - "Upstream_name"
|
||||
* - "Has_virtual_paths": boolean
|
||||
* - "Path"
|
||||
*
|
||||
* The return values will be added to the dot dict with keys:
|
||||
* - "dest"
|
||||
* - "proto"
|
||||
* - "network_tag"
|
||||
* - "upstream"
|
||||
* - "loadbalance"
|
||||
* - "keepalive"
|
||||
*/}}
|
||||
{{- define "get_path_info" }}
|
||||
{{- /* Get the VIRTUAL_PROTO defined by containers w/ the same vhost-vpath, falling back to "http". */}}
|
||||
{{- $proto := trim (or (first (groupByKeys $.Containers "Env.VIRTUAL_PROTO")) "http") }}
|
||||
{{- /* Get the NETWORK_ACCESS defined by containers w/ the same vhost, falling back to "external". */}}
|
||||
{{- $network_tag := or (first (groupByKeys $.Containers "Env.NETWORK_ACCESS")) "external" }}
|
||||
|
||||
{{- $loadbalance := first (keys (groupByLabel $.Containers "com.github.nginx-proxy.nginx-proxy.loadbalance")) }}
|
||||
{{- $keepalive := coalesce (first (keys (groupByLabel $.Containers "com.github.nginx-proxy.nginx-proxy.keepalive"))) "disabled" }}
|
||||
|
||||
{{- $upstream := $.Upstream_name }}
|
||||
{{- $dest := "" }}
|
||||
{{- if $.Has_virtual_paths }}
|
||||
{{- $sum := sha1 $.Path }}
|
||||
{{- $upstream = printf "%s-%s" $upstream $sum }}
|
||||
{{- $dest = or (first (groupByKeys $.Containers "Env.VIRTUAL_DEST")) "" }}
|
||||
{{- end }}
|
||||
{{- $_ := set $ "proto" $proto }}
|
||||
{{- $_ := set $ "network_tag" $network_tag }}
|
||||
{{- $_ := set $ "upstream" $upstream }}
|
||||
{{- $_ := set $ "dest" $dest }}
|
||||
{{- $_ := set $ "loadbalance" $loadbalance }}
|
||||
{{- $_ := set $ "keepalive" $keepalive }}
|
||||
{{- end }}
|
||||
|
||||
# If we receive X-Forwarded-Proto, pass it through; otherwise, pass along the
|
||||
# scheme used to connect to this server
|
||||
map $http_x_forwarded_proto $proxy_x_forwarded_proto {
|
||||
@ -492,27 +542,19 @@ proxy_set_header Proxy "";
|
||||
{{- $tmp_paths = dict "/" $containers }}
|
||||
{{- end }}
|
||||
|
||||
{{ $paths := dict }}
|
||||
{{- $paths := dict }}
|
||||
|
||||
{{- range $path, $containers := $tmp_paths }}
|
||||
{{- /* Get the VIRTUAL_PROTO defined by containers w/ the same vhost-vpath, falling back to "http". */}}
|
||||
{{- $proto := trim (or (first (groupByKeys $containers "Env.VIRTUAL_PROTO")) "http") }}
|
||||
{{- /* Get the NETWORK_ACCESS defined by containers w/ the same vhost, falling back to "external". */}}
|
||||
{{- $network_tag := or (first (groupByKeys $containers "Env.NETWORK_ACCESS")) "external" }}
|
||||
|
||||
{{- $upstream := $upstream_name }}
|
||||
{{- $dest := "" }}
|
||||
{{- if $has_virtual_paths }}
|
||||
{{- $sum := sha1 $path }}
|
||||
{{- $upstream = printf "%s-%s" $upstream $sum }}
|
||||
{{- $dest = (or (first (groupByKeys $containers "Env.VIRTUAL_DEST")) "") }}
|
||||
{{- end }}
|
||||
{{- $args := dict "Containers" $containers "Path" $path "Upstream_name" $upstream_name "Has_virtual_paths" $has_virtual_paths }}
|
||||
{{- template "get_path_info" $args }}
|
||||
{{- $_ := set $paths $path (dict
|
||||
"containers" $containers
|
||||
"dest" $dest
|
||||
"proto" $proto
|
||||
"network_tag" $network_tag
|
||||
"upstream" $upstream
|
||||
"ports" (dict "legacy" $containers)
|
||||
"dest" $args.dest
|
||||
"proto" $args.proto
|
||||
"network_tag" $args.network_tag
|
||||
"upstream" $args.upstream
|
||||
"loadbalance" $args.loadbalance
|
||||
"keepalive" $args.keepalive
|
||||
) }}
|
||||
{{- end }}
|
||||
|
||||
@ -623,7 +665,7 @@ server {
|
||||
|
||||
{{- range $path, $vpath := $vhost.paths }}
|
||||
# {{ $hostname }}{{ $path }}
|
||||
{{ template "upstream" (dict "globals" $globals "Upstream" $vpath.upstream "Containers" $vpath.containers) }}
|
||||
{{ template "upstream" (dict "globals" $globals "Path" $path "VPath" $vpath) }}
|
||||
{{- end }}
|
||||
|
||||
{{- if and $vhost.cert_ok (eq $vhost.https_method "redirect") }}
|
||||
@ -754,13 +796,9 @@ server {
|
||||
{{- range $path, $vpath := $vhost.paths }}
|
||||
{{- template "location" (dict
|
||||
"Path" $path
|
||||
"Proto" $vpath.proto
|
||||
"Upstream" $vpath.upstream
|
||||
"Host" $hostname
|
||||
"VhostRoot" $vhost.vhost_root
|
||||
"Dest" $vpath.dest
|
||||
"NetworkTag" $vpath.network_tag
|
||||
"Containers" $vpath.containers
|
||||
"VPath" $vpath
|
||||
) }}
|
||||
{{- end }}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user