This commit is contained in:
propheth 2021-04-03 09:48:18 +02:00 committed by GitHub
commit 7dc287e6c8
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 43 additions and 2 deletions

View file

@ -52,7 +52,8 @@ services:
whoami:
image: jwilder/whoami
environment:
- VIRTUAL_HOST=whoami.local
- VIRTUAL_HOST=whoami.local,www.whoami.local
- REDIRECT=www.whoami.local
```
```shell
@ -82,6 +83,10 @@ If you need to support multiple virtual hosts for a container, you can separate
You can also use wildcards at the beginning and the end of host name, like `*.bar.com` or `foo.bar.*`. Or even a regular expression, which can be very useful in conjunction with a wildcard DNS service like [xip.io](http://xip.io), using `~^foo\.bar\..*\.xip\.io` will match `foo.bar.127.0.0.1.xip.io`, `foo.bar.10.0.2.2.xip.io` and all other given IPs. More information about this topic can be found in the nginx documentation about [`server_names`](http://nginx.org/en/docs/http/server_names.html).
### Redirect Hosts
Using the `REDIRECT` environment variable, you can 301 permanent redirect all your virtual hosts to a specific host. Commonly used in production for SEO purposes. For example, you can redirect both `www.bar.com,bar.com` to `www.bar.com` using `REDIRECT=www.bar.com` or `www.bar.com,bar.com` to `bar.com` using `REDIRECT=bar.com`.
### Multiple Networks
With the addition of [overlay networking](https://docs.docker.com/engine/userguide/networking/get-started-overlay/) in Docker 1.9, your `nginx-proxy` container may need to connect to backend containers on multiple networks. By default, if you don't pass the `--net` flag when your `nginx-proxy` container is created, it will only be attached to the default `bridge` network. This means that it will not be able to connect to containers on networks other than `bridge`.

View file

@ -225,6 +225,8 @@ upstream {{ $upstream_name }} {
{{/* Get the VIRTUAL_ROOT By containers w/ use fastcgi root */}}
{{ $vhost_root := or (first (groupByKeys $containers "Env.VIRTUAL_ROOT")) "/var/www/public" }}
{{/* Get the first redirect defined by containers w/ the same vhost */}}
{{ $redirectHost := or (first (groupByKeys $containers "Env.REDIRECT")) ""}}
{{/* Get the first cert name defined by containers w/ the same vhost */}}
{{ $certName := (first (groupByKeys $containers "Env.CERT_NAME")) }}
@ -261,10 +263,20 @@ server {
try_files $uri =404;
break;
}
{{ if (and $redirectHost (ne $redirectHost $host)) }}
# Redirect host {{ $host }} => {{ $redirectHost }}
{{ end }}
{{ if (and $redirectHost (ne $redirectHost $host)) }}
location / {
return 301 https://{{ $redirectHost }}$request_uri;
}
{{ else }}
location / {
return 301 https://$host$request_uri;
}
{{ end }}
}
{{ end }}
@ -309,7 +321,12 @@ server {
{{ else if (exists "/etc/nginx/vhost.d/default") }}
include /etc/nginx/vhost.d/default;
{{ end }}
{{ if (and $redirectHost (ne $redirectHost $host)) }}
# Redirect host {{ $host }} => {{ $redirectHost }}
{{ end }}
{{ if (or (not $redirectHost) (eq $redirectHost $host)) }}
location / {
{{ if eq $proto "uwsgi" }}
include uwsgi_params;
@ -334,6 +351,13 @@ server {
include /etc/nginx/vhost.d/default_location;
{{ end }}
}
{{ end }}
{{ if (and $redirectHost (ne $redirectHost $host)) }}
location / {
return 301 https://{{$redirectHost}}$request_uri;
}
{{ end }}
}
{{ end }}
@ -358,7 +382,12 @@ server {
{{ else if (exists "/etc/nginx/vhost.d/default") }}
include /etc/nginx/vhost.d/default;
{{ end }}
{{ if (and $redirectHost (ne $redirectHost $host)) }}
# Redirect host {{ $host }} => {{ $redirectHost }}
{{ end }}
{{ if (or (not $redirectHost) (eq $redirectHost $host)) }}
location / {
{{ if eq $proto "uwsgi" }}
include uwsgi_params;
@ -382,6 +411,13 @@ server {
include /etc/nginx/vhost.d/default_location;
{{ end }}
}
{{ end }}
{{ if (and $redirectHost (ne $redirectHost $host)) }}
location / {
return 301 http://{{ $redirectHost }}$request_uri;
}
{{ end }}
}
{{ if (and (not $is_https) (exists "/etc/nginx/certs/default.crt") (exists "/etc/nginx/certs/default.key")) }}