From b6b8d2f5f0045bafaaa6cbd99a469035c525bc2c Mon Sep 17 00:00:00 2001 From: Pascal Date: Thu, 25 Feb 2021 13:10:45 -0500 Subject: [PATCH] [add] added support for custom nginx location config files --- docker-compose.yml | 14 ++++-- files/upstream_configs/upstream.conf.example | 13 ++++++ proxy/files/entrypoint.sh | 46 ++++++++++++++------ 3 files changed, 56 insertions(+), 17 deletions(-) create mode 100644 files/upstream_configs/upstream.conf.example diff --git a/docker-compose.yml b/docker-compose.yml index 5b33917..220c02d 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -17,16 +17,21 @@ services: image: proxy container_name: proxy ports: - - "80:8080" - - "443:8443" + - "9980:8080" + - "9443:8443" networks: - service_web - service_certbot + - backend_proxy volumes: # cert volume - proxy_ssl:/service/ssl:ro # /.well-known/acme-challenge/ volume - proxy_certbot:/service/html/certbot:ro + # custom config mount + # can be used to set custom locations for upstream server + # has to have the same name as the upstream server to be loaded + - ./files/upstream_configs:/upstream_configs:ro certbot: depends_on: @@ -98,4 +103,7 @@ networks: service_web: name: service_web service_certbot: - name: service_certbot \ No newline at end of file + name: service_certbot + backend_proxy: + name: backend_proxy + external: true diff --git a/files/upstream_configs/upstream.conf.example b/files/upstream_configs/upstream.conf.example new file mode 100644 index 0000000..24157d9 --- /dev/null +++ b/files/upstream_configs/upstream.conf.example @@ -0,0 +1,13 @@ + location / { + # allow for upstream to be offline by setting + # docker dns resolver and a variable for the server + resolver 127.0.0.11 valid=30s; + proxy_pass http://$upstream; + + proxy_redirect off; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Host $server_name; + proxy_set_header X-Forwarded-Upstream $upstream; + } diff --git a/proxy/files/entrypoint.sh b/proxy/files/entrypoint.sh index e0f427e..3936709 100644 --- a/proxy/files/entrypoint.sh +++ b/proxy/files/entrypoint.sh @@ -1,5 +1,8 @@ #!/bin/sh +# global config +CONF_DIR="${CONF_DIR:-/upstream_configs}" + # configuration web_root_path="/service/html" cert_root_path="/service/ssl" @@ -61,6 +64,11 @@ function get_element() echo $result } +# helper function to isolate server from port +function server_name() +{ + echo -n ${1%:*} +} # helper function to check if a string contains a substring in dash function contains() { @@ -171,6 +179,28 @@ function gen_server_config() done local rng_number=$(rng) + + local server_location=" + location / { + # allow for upstream to be offline by setting + # docker dns resolver and a variable for the server + resolver 127.0.0.11 valid=30s; + proxy_pass http://\$upstream; + + proxy_redirect off; + proxy_set_header Host \$host; + proxy_set_header X-Real-IP \$remote_addr; + proxy_set_header X-Forwarded-For \$proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Host \$server_name; + proxy_set_header X-Forwarded-Upstream \$upstream; + } + " + + # check if config file is mounted and use it in place of default location + local config_file="$CONF_DIR/$(server_name $server).conf" + [ -f "$config_file" ] \ + && server_location="include $config_file;" + local server_var=" server { listen 8443 ssl; @@ -185,21 +215,9 @@ function gen_server_config() ssl_certificate /service/ssl/$root_domain/fullchain.pem; ssl_certificate_key /service/ssl/$root_domain/privkey.pem; - set \$upstream $server; - - location / { - # allow for upstream to be offline by setting - # docker dns resolver and a variable for the server - resolver 127.0.0.11 valid=30s; - proxy_pass http://\$upstream$port; + set \$upstream $server$port; - proxy_redirect off; - proxy_set_header Host \$host; - proxy_set_header X-Real-IP \$remote_addr; - proxy_set_header X-Forwarded-For \$proxy_add_x_forwarded_for; - proxy_set_header X-Forwarded-Host \$server_name; - proxy_set_header X-Forwarded-Upstream \$upstream; - } + $server_location location /0x90 { ssi on;