Skip to content
This repository was archived by the owner on Nov 5, 2022. It is now read-only.

Commit 6b2e0cf

Browse files
committed
Support paths with VIRTUAL_PATH
1 parent a81bb96 commit 6b2e0cf

File tree

1 file changed

+65
-14
lines changed

1 file changed

+65
-14
lines changed

nginx.tmpl

Lines changed: 65 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,21 @@
1+
{{ define "upstream-block" }}
2+
upstream {{ .Host }}{{ .Suffix }} {
3+
{{ range $container := .Containers }}
4+
{{ $addrLen := len $container.Addresses }}
5+
{{/* If only 1 port exposed, use that */}}
6+
{{ if eq $addrLen 1 }}
7+
{{ $address := index $container.Addresses 0 }}
8+
{{ template "upstream" (dict "Container" $container "Address" $address) }}
9+
{{/* If more than one port exposed, use the one matching VIRTUAL_PORT env var, falling back to standard web port 80 */}}
10+
{{ else }}
11+
{{ $port := coalesce $container.Env.VIRTUAL_PORT "80" }}
12+
{{ $address := where $container.Addresses "Port" $port | first }}
13+
{{ template "upstream" (dict "Container" $container "Address" $address) }}
14+
{{ end }}
15+
{{ end }}
16+
}
17+
{{ end }}
18+
119
{{ define "upstream" }}
220
{{ if .Address }}
321
{{/* If we got the containers from swarm and this container's port is published to host, use host IP:PORT */}}
@@ -71,22 +89,17 @@ server {
7189
{{ end }}
7290

7391
{{ range $host, $containers := groupByMulti $ "Env.VIRTUAL_HOST" "," }}
74-
75-
upstream {{ $host }} {
76-
{{ range $container := $containers }}
77-
{{ $addrLen := len $container.Addresses }}
78-
{{/* If only 1 port exposed, use that */}}
79-
{{ if eq $addrLen 1 }}
80-
{{ $address := index $container.Addresses 0 }}
81-
{{ template "upstream" (dict "Container" $container "Address" $address) }}
82-
{{/* If more than one port exposed, use the one matching VIRTUAL_PORT env var, falling back to standard web port 80 */}}
83-
{{ else }}
84-
{{ $port := coalesce $container.Env.VIRTUAL_PORT "80" }}
85-
{{ $address := where $container.Addresses "Port" $port | first }}
86-
{{ template "upstream" (dict "Container" $container "Address" $address) }}
92+
{{ $paths := groupBy $containers "Env.VIRTUAL_PATH" }}
93+
{{ $pathCount := len $paths }}
94+
{{ if eq $pathCount 0 }}
95+
{{ template "upstream-block" dict "Host" $host "Suffix" "" "Containers" $containers }}
96+
{{ else }}
97+
{{ range $path, $containers := $paths }}
98+
{{ $sum := sha1 $path }}
99+
{{ $suffix := printf "-%s" $sum }}
100+
{{ template "upstream-block" dict "Host" $host "Suffix" $suffix "Containers" $containers }}
87101
{{ end }}
88102
{{ end }}
89-
}
90103

91104
{{ $default_host := or ($.Env.DEFAULT_HOST) "" }}
92105
{{ $default_server := index (dict $host "" $default_host "default_server") $host }}
@@ -143,6 +156,7 @@ server {
143156
include /etc/nginx/vhost.d/default;
144157
{{ end }}
145158

159+
{{ if eq $pathCount 0 }}
146160
location / {
147161
proxy_pass {{ $proto }}://{{ $host }};
148162
{{ if (exists (printf "/etc/nginx/htpasswd/%s" $host)) }}
@@ -155,6 +169,24 @@ server {
155169
include /etc/nginx/vhost.d/default_location;
156170
{{ end }}
157171
}
172+
{{ else }}
173+
{{ range $path, $containers := $paths }}
174+
{{ $sum := sha1 $path }}
175+
{{ $suffix := printf "-%s" $sum }}
176+
location {{ $path }} {
177+
proxy_pass http://{{ $host }}{{ $suffix }};
178+
{{ if (exists (printf "/etc/nginx/htpasswd/%s" $host)) }}
179+
auth_basic "Restricted {{ $host }}";
180+
auth_basic_user_file {{ (printf "/etc/nginx/htpasswd/%s" $host) }};
181+
{{ end }}
182+
{{ if (exists (printf "/etc/nginx/vhost.d/%s_location" $host)) }}
183+
include {{ printf "/etc/nginx/vhost.d/%s_location" $host }};
184+
{{ else if (exists "/etc/nginx/vhost.d/default_location") }}
185+
include /etc/nginx/vhost.d/default_location;
186+
{{ end }}
187+
}
188+
{{ end }}
189+
{{ end }}
158190
}
159191
{{ else }}
160192

@@ -169,6 +201,7 @@ server {
169201
include /etc/nginx/vhost.d/default;
170202
{{ end }}
171203

204+
{{ if eq $pathCount 0 }}
172205
location / {
173206
proxy_pass {{ $proto }}://{{ $host }};
174207
{{ if (exists (printf "/etc/nginx/htpasswd/%s" $host)) }}
@@ -181,6 +214,24 @@ server {
181214
include /etc/nginx/vhost.d/default_location;
182215
{{ end }}
183216
}
217+
{{ else }}
218+
{{ range $path, $containers := $paths }}
219+
{{ $sum := sha1 $path }}
220+
{{ $suffix := printf "-%s" $sum }}
221+
location {{ $path }} {
222+
proxy_pass http://{{ $host }}{{ $suffix }};
223+
{{ if (exists (printf "/etc/nginx/htpasswd/%s" $host)) }}
224+
auth_basic "Restricted {{ $host }}";
225+
auth_basic_user_file {{ (printf "/etc/nginx/htpasswd/%s" $host) }};
226+
{{ end }}
227+
{{ if (exists (printf "/etc/nginx/vhost.d/%s_location" $host)) }}
228+
include {{ printf "/etc/nginx/vhost.d/%s_location" $host }};
229+
{{ else if (exists "/etc/nginx/vhost.d/default_location") }}
230+
include /etc/nginx/vhost.d/default_location;
231+
{{ end }}
232+
}
233+
{{ end }}
234+
{{ end }}
184235
}
185236

186237
{{ if (and (exists "/etc/nginx/certs/default.crt") (exists "/etc/nginx/certs/default.key")) }}

0 commit comments

Comments
 (0)