diff --git a/swarm-proxy-letsencrypt/99-swarm-proxy-letsencrypt-entry.sh b/swarm-proxy-letsencrypt/99-swarm-proxy-letsencrypt-entry.sh index 025edb22f4b700d9f70278edf3dce40ef301209b..55993953ad438de5d07d1cc55023e0114fbf5978 100755 --- a/swarm-proxy-letsencrypt/99-swarm-proxy-letsencrypt-entry.sh +++ b/swarm-proxy-letsencrypt/99-swarm-proxy-letsencrypt-entry.sh @@ -180,3 +180,13 @@ cat > "/usr/share/nginx/html/.well-known/acme-challenge/active.html" << EOF </body> </html> EOF + + +cat > "/etc/nginx/conf.d/lb.qoto.org-activate.conf" << EOF +server { + server_name lb.qoto.org; + listen 80; + + include /etc/nginx/vhost.d/default*; +} +EOF diff --git a/swarm-proxy-letsencrypt/app/letsencrypt_service b/swarm-proxy-letsencrypt/app/letsencrypt_service index cbc68fa80403edda2bd22e74f91c60c05ab38e45..f3fbc869b59b4982f1d914895fceed6f0e31fe80 100755 --- a/swarm-proxy-letsencrypt/app/letsencrypt_service +++ b/swarm-proxy-letsencrypt/app/letsencrypt_service @@ -331,7 +331,7 @@ function update_certs { server { server_name ${LE_HOST}; - listen 443 ssl http2 ; + listen 444 ssl http2 ; ssl_session_timeout 5m; ssl_session_cache shared:SSL:50m; ssl_session_tickets off; diff --git a/swarm-proxy-letsencrypt/swarm-proxy.tmpl b/swarm-proxy-letsencrypt/swarm-proxy.tmpl deleted file mode 100644 index 1306fad72f636d9961f3d268ad62415f2b26be5b..0000000000000000000000000000000000000000 --- a/swarm-proxy-letsencrypt/swarm-proxy.tmpl +++ /dev/null @@ -1,42 +0,0 @@ -### BEGIN SERVICE ### -upstream ${HOST}_upstream { - server ${UPSTREAM}:${PORT}; -} - -server { - server_name ${HOST}; - listen 80 ; - - location /.well-known/acme-challenge/ { - auth_basic off; - allow all; - root /usr/share/nginx/html; - try_files $uri =404; - break; - } - - location / { - return 301 https://$host$request_uri; - } -} - -server { - server_name ${HOST}; - listen 443 ssl http2 ; - ssl_session_timeout 5m; - ssl_session_cache shared:SSL:50m; - ssl_session_tickets off; - ssl_certificate /etc/nginx/certs/${HOST}.crt; - ssl_certificate_key /etc/nginx/certs/${HOST}.key; - ssl_dhparam /etc/nginx/certs/${HOST}.dhparam.pem; - ssl_stapling on; - ssl_stapling_verify on; - ssl_trusted_certificate /etc/nginx/certs/${HOST}.chain.pem; - add_header Strict-Transport-Security "max-age=31536000" always; - include /etc/nginx/vhost.d/*; - - location / { - proxy_pass http://${HOST}_upstream; - } -} -### END SERVICE ### diff --git a/swarm-proxy/01-copy-default-entry.sh b/swarm-proxy/01-copy-default-entry.sh index 6589412bcfad26375a51dcaf0b486acb7e956f99..44ed37904248c628f2ddcc625b88caac72fd58f8 100755 --- a/swarm-proxy/01-copy-default-entry.sh +++ b/swarm-proxy/01-copy-default-entry.sh @@ -1,7 +1,36 @@ #!/bin/bash set -e -echo "Copying default.conf to conf.d directory" +echo "Copying serv.d/default.conf to serv.d directory" +cat > "/etc/nginx/serv.d/default.conf" << EOF +events { + worker_connections 1024; +} + + +http { + include /etc/nginx/mime.types; + default_type application/octet-stream; + + log_format main '\$remote_addr - \$remote_user [\$time_local] "\$request" ' + '\$status $body_bytes_sent "\$http_referer" ' + '"\$http_user_agent" "\$http_x_forwarded_for"'; + + access_log /var/log/nginx/access.log main; + + sendfile on; + #tcp_nopush on; + + keepalive_timeout 65; + + #gzip on; + + include /etc/nginx/conf.d/*; +} +EOF + + +echo "Copying conf.d/default.conf to conf.d directory" cat > "/etc/nginx/conf.d/default.conf" << EOF ############################################################################ ## General Configuration @@ -51,7 +80,7 @@ access_log off; ssl_ciphers 'ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384'; ssl_prefer_server_ciphers off; -#resolver 10.0.0.2; +resolver 10.0.0.2; # HTTP 1.1 support proxy_http_version 1.1; @@ -73,21 +102,17 @@ proxy_set_header Proxy ""; ## Catch all Servers ############################################################################ -upstream gitlab_pages_upstream { - server host.docker.internal:8080; +upstream fallthrough_http_upstream { + server ${SWARM_PROXY_FALLTHROUGH_HTTP_HOST:-host.docker.internal}:${SWARM_PROXY_FALLTHROUGH_HTTP_PORT:-8080}; } server { listen 80 default_server; server_name _; - include /etc/nginx/vhost.d/git.qoto.org*; - include /etc/nginx/vhost.d/default*; - location / { - proxy_pass http://gitlab_pages_upstream; + proxy_pass http://fallthrough_http_upstream; } } - EOF diff --git a/swarm-proxy/Dockerfile b/swarm-proxy/Dockerfile index 35f705d411345b22d9fb5a98aed97fb32258f0ef..9c1b813a4902e18dba5b1afea39d7ab8ab203bd3 100644 --- a/swarm-proxy/Dockerfile +++ b/swarm-proxy/Dockerfile @@ -6,14 +6,18 @@ LABEL maintainer="Jeffrey Phillips Freeman the@jeffreyfreeman.me" RUN sed -i 's/worker_processes 1/worker_processes auto/' /etc/nginx/nginx.conf && \ mkdir -p /etc/swarm-proxy && \ mkdir -p /usr/share/swarm-proxy && \ - rm /docker-entrypoint.d/10-listen-on-ipv6-by-default.sh + rm /docker-entrypoint.d/10-listen-on-ipv6-by-default.sh && \ + rm /etc/nginx/nginx.conf && \ + mkdir -p /etc/nginx/serv.d +COPY nginx.conf /etc/nginx/ COPY dhparam.pem.default /etc/swarm-proxy/ COPY generate-dhparam /usr/bin/ COPY swarm-gen.conf /etc/swarm-gen/ -COPY swarm-proxy.tmpl /etc/swarm-gen/templates/ +COPY swarm-proxy.conf.tmpl /etc/swarm-gen/templates/ +COPY https-routing.conf.tmpl /etc/swarm-gen/templates/ COPY 01-copy-default-entry.sh /docker-entrypoint.d/ -VOLUME ["/etc/nginx/certs", "/etc/nginx/dhparam", "/etc/nginx/conf.d", "/etc/nginx/vhost.d", "/usr/share/nginx/html"] +VOLUME ["/etc/nginx/certs", "/etc/nginx/dhparam", "/etc/nginx/conf.d", "/etc/nginx/vhost.d", "/etc/nginx/serv.d", "/usr/share/nginx/html"] ENV DOCKER_HOST unix:///var/run/docker.sock diff --git a/swarm-proxy/https-routing.conf.tmpl b/swarm-proxy/https-routing.conf.tmpl new file mode 100644 index 0000000000000000000000000000000000000000..4266bcc428e647e92362cf9e15fd739b3657b61e --- /dev/null +++ b/swarm-proxy/https-routing.conf.tmpl @@ -0,0 +1,24 @@ +stream { + + map $ssl_preread_server_name $name { +### BEGIN SERVICE ### + ${HOST} local_https; +### END SERVICE ### + default fallthrough_https_upstream; + } + + upstream fallthrough_https_upstream { + server host.docker.internal:8080; + } + + upstream local_https { + server 127.0.0.1:444; + } + + server { + listen 443; + proxy_pass $name; + ssl_preread on; + } +} + diff --git a/swarm-proxy/nginx.conf b/swarm-proxy/nginx.conf new file mode 100644 index 0000000000000000000000000000000000000000..95e556fa0b319861f404ad7e543470b4bf656767 --- /dev/null +++ b/swarm-proxy/nginx.conf @@ -0,0 +1,8 @@ +user nginx; +worker_processes auto; + +error_log /var/log/nginx/error.log warn; +pid /var/run/nginx.pid; + + +include /etc/nginx/serv.d/*; diff --git a/swarm-proxy/swarm-gen.conf b/swarm-proxy/swarm-gen.conf index 1397729aeea0722fd045a451e0a942436fa45979..45f1b3d48f603575e3b9bb3d95433fed5ae92926 100644 --- a/swarm-proxy/swarm-gen.conf +++ b/swarm-proxy/swarm-gen.conf @@ -2,6 +2,11 @@ interval=5 wait=5 +[[directory]] +dir=/etc/nginx/serv.d +notifycmd=nginx -s reload +wait=5 + [[directory]] dir=/etc/nginx/vhost.d notifycmd=nginx -s reload @@ -23,6 +28,11 @@ notifycmd=nginx -s reload wait=5 [[template]] -template=/etc/swarm-gen/templates/swarm-proxy.tmpl +template=/etc/swarm-gen/templates/swarm-proxy.conf.tmpl dest=/etc/nginx/conf.d/swarm-proxy.conf notifycmd=nginx -s reload + +[[template]] +template=/etc/swarm-gen/templates/https-routing.conf.tmpl +dest=/etc/nginx/serv.d/https-routing.conf +notifycmd=nginx -s reload diff --git a/swarm-proxy/swarm-proxy.tmpl b/swarm-proxy/swarm-proxy.conf.tmpl similarity index 100% rename from swarm-proxy/swarm-proxy.tmpl rename to swarm-proxy/swarm-proxy.conf.tmpl