enable list of domains for a virtual host
Enables the autoproxy to handle multiple domains for a virtual host: e.g. a container can handle requests to www.somedomain.de and somedomain.de
This commit is contained in:
parent
04e6d506a1
commit
7196d03ec8
13
README.md
13
README.md
|
@ -2,14 +2,14 @@
|
|||
This image attaches to the docker event queue and creates/removes proxy settings in the contained nginx.
|
||||
|
||||
## How it works
|
||||
Containers that should be proxied neet meta information in the environment variable *PROXY_DATA* available.
|
||||
Containers that should be proxied need meta information in the environment variable *PROXY_DATA* available.
|
||||
This variable must be of the following format:
|
||||
|
||||
`PROXY_DATA=server_name:test.com,port:80`
|
||||
`PROXY_DATA=server_names:test.com;www.test.com,port:80`
|
||||
|
||||
The following options are possible:
|
||||
|
||||
* **server_name**(required) the name of the virtual host
|
||||
* **server_names**(required) the names of the virtual hosts separated by ";"
|
||||
* **port**(optional, defaults to 80) the port on the target container
|
||||
* **ip**(optional, defaults to listen on all IPs) the IP on which the proxy should listen.
|
||||
* **location**(optional) if the proxied web application is not running on the /-path
|
||||
|
@ -17,7 +17,7 @@ The following options are possible:
|
|||
## Starting the container
|
||||
|
||||
Since the container uses Docker's internal event reporting, it needs access to the daemon. At the
|
||||
moment, only access via UNIX socket ist possible. Because of that, the socket has to be handed
|
||||
moment, only access via UNIX socket is possible. Because of that, the socket has to be handed
|
||||
into the container (*-v /var/run/docker.sock:/var/run/docker.sock*).
|
||||
|
||||
### Single IP / All IPs
|
||||
|
@ -29,7 +29,7 @@ Run the container like this:
|
|||
|
||||
That means that the container exposes all Web Apps on all IPs. Do **not** use the *ip* option from above on the target containers. The *PROXY_DATA* environment variables would be something like
|
||||
|
||||
`PROXY_DATA=server_name:cooldomain.test.com,port:8080,location=/webApp`
|
||||
`PROXY_DATA=server_names:cooldomain.test.com,port:8080,location=/webApp`
|
||||
|
||||
### Multiple IPs
|
||||
This option is used if your Docker Host has multiple IPs (perhaps a public IP in the internet and a private IP on a VPN). It is possible to expose some Web Apps only to the private network.
|
||||
|
@ -40,7 +40,6 @@ One container must be started for each IP that should host Web Apps. For example
|
|||
|
||||
If a target container does **not** have the *ip* option set, it listens on **all** IP adresses and will be handled by both containers.
|
||||
If a container uses, e.g.,
|
||||
`PROXY_DATA=server_name:cooldomain.test.com,port:8080,location=/webApp,ip=10.1.2.3`
|
||||
`PROXY_DATA=server_names:cooldomain.test.com,port:8080,location=/webApp,ip=10.1.2.3`
|
||||
|
||||
then it will be only available on the private 10.1.2.3 IP (perhaps using a VPN).
|
||||
|
||||
|
|
|
@ -26,7 +26,7 @@ server {
|
|||
location_template="""# proxy for container '$containername'
|
||||
server {
|
||||
listen $listen;
|
||||
server_name $name;
|
||||
server_name $names;
|
||||
location / {
|
||||
return 301 $$scheme://$name/$location;
|
||||
}
|
||||
|
@ -94,7 +94,7 @@ def handle_container(id):
|
|||
'containername': extract_name(inspect_data),
|
||||
'ip': extract_ip(inspect_data),
|
||||
'location': get_if_available(proxy_data, 'location', ''),
|
||||
'name': get_if_available(proxy_data, 'server_name', ''),
|
||||
'names': get_if_available(proxy_data, 'server_names', '').replace(';', ' '),
|
||||
'port': get_if_available(proxy_data, 'port', 80),
|
||||
'listen': '*:80'
|
||||
}
|
||||
|
@ -190,4 +190,3 @@ if __name__ == '__main__':
|
|||
handle_container(container_id)
|
||||
|
||||
reload_nginx_configuration()
|
||||
|
||||
|
|
Loading…
Reference in New Issue