Merge pull request #480 from jwilder/jw-certs
Fix template error when /etc/nginx/certs does not exist
This commit is contained in:
commit
fdfb0becd2
4 changed files with 48 additions and 5 deletions
2
Procfile
2
Procfile
|
@ -1,2 +1,2 @@
|
||||||
nginx: nginx
|
nginx: nginx
|
||||||
dockergen: docker-gen -watch -only-exposed -notify "nginx -s reload" /app/nginx.tmpl /etc/nginx/conf.d/default.conf
|
dockergen: docker-gen -watch -notify "nginx -s reload" /app/nginx.tmpl /etc/nginx/conf.d/default.conf
|
||||||
|
|
26
README.md
26
README.md
|
@ -19,6 +19,32 @@ The containers being proxied must [expose](https://docs.docker.com/reference/run
|
||||||
|
|
||||||
Provided your DNS is setup to forward foo.bar.com to the a host running nginx-proxy, the request will be routed to a container with the VIRTUAL_HOST env var set.
|
Provided your DNS is setup to forward foo.bar.com to the a host running nginx-proxy, the request will be routed to a container with the VIRTUAL_HOST env var set.
|
||||||
|
|
||||||
|
### Docker Compose
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
version: '2'
|
||||||
|
services:
|
||||||
|
nginx-proxy:
|
||||||
|
image: jwilder/nginx-proxy
|
||||||
|
container_name: nginx-proxy
|
||||||
|
ports:
|
||||||
|
- "80:80"
|
||||||
|
volumes:
|
||||||
|
- /var/run/docker.sock:/tmp/docker.sock:ro
|
||||||
|
|
||||||
|
whoami:
|
||||||
|
image: jwilder/whoami
|
||||||
|
container_name: whoami
|
||||||
|
environment:
|
||||||
|
- VIRTUAL_HOST=whoami.local
|
||||||
|
```
|
||||||
|
|
||||||
|
```shell
|
||||||
|
$ docker-compose up
|
||||||
|
$ curl -H "Host: whoami.local" localhost
|
||||||
|
I''m 5b129ab83266
|
||||||
|
```
|
||||||
|
|
||||||
### Multiple Ports
|
### Multiple Ports
|
||||||
|
|
||||||
If your container exposes multiple ports, nginx-proxy will default to the service running on port 80. If you need to specify a different port, you can set a VIRTUAL_PORT env var to select a different one. If your container only exposes one port and it has a VIRTUAL_HOST env var set, that port will be selected.
|
If your container exposes multiple ports, nginx-proxy will default to the service running on port 80. If you need to specify a different port, you can set a VIRTUAL_PORT env var to select a different one. If your container only exposes one port and it has a VIRTUAL_HOST env var set, that port will be selected.
|
||||||
|
|
15
docker-compose.yml
Normal file
15
docker-compose.yml
Normal file
|
@ -0,0 +1,15 @@
|
||||||
|
version: '2'
|
||||||
|
services:
|
||||||
|
nginx-proxy:
|
||||||
|
image: jwilder/nginx-proxy
|
||||||
|
container_name: nginx-proxy
|
||||||
|
ports:
|
||||||
|
- "80:80"
|
||||||
|
volumes:
|
||||||
|
- /var/run/docker.sock:/tmp/docker.sock:ro
|
||||||
|
|
||||||
|
whoami:
|
||||||
|
image: jwilder/whoami
|
||||||
|
environment:
|
||||||
|
- VIRTUAL_HOST=whoami.local
|
||||||
|
|
10
nginx.tmpl
10
nginx.tmpl
|
@ -112,11 +112,13 @@ upstream {{ $host }} {
|
||||||
{{ $certName := (first (groupByKeys $containers "Env.CERT_NAME")) }}
|
{{ $certName := (first (groupByKeys $containers "Env.CERT_NAME")) }}
|
||||||
|
|
||||||
{{/* Get the best matching cert by name for the vhost. */}}
|
{{/* Get the best matching cert by name for the vhost. */}}
|
||||||
|
{{ $vhostCert := "" }}
|
||||||
|
{{ if exists "/etc/nginx/certs" }}
|
||||||
{{ $vhostCert := (closest (dir "/etc/nginx/certs") (printf "%s.crt" $host))}}
|
{{ $vhostCert := (closest (dir "/etc/nginx/certs") (printf "%s.crt" $host))}}
|
||||||
|
{{/* vhostCert is actually a filename so remove any suffixes since they are added later */}}
|
||||||
{{/* vhostCert is actually a filename so remove any suffixes since they are added later */}}
|
{{ $vhostCert := replace $vhostCert ".crt" "" -1 }}
|
||||||
{{ $vhostCert := replace $vhostCert ".crt" "" -1 }}
|
{{ $vhostCert := replace $vhostCert ".key" "" -1 }}
|
||||||
{{ $vhostCert := replace $vhostCert ".key" "" -1 }}
|
{{ end }}
|
||||||
|
|
||||||
{{/* Use the cert specifid on the container or fallback to the best vhost match */}}
|
{{/* Use the cert specifid on the container or fallback to the best vhost match */}}
|
||||||
{{ $cert := (coalesce $certName $vhostCert) }}
|
{{ $cert := (coalesce $certName $vhostCert) }}
|
||||||
|
|
Reference in a new issue