diff --git a/docker_compose_applications/reverse-proxy/compose.yaml b/docker_compose_applications/reverse-proxy/compose.yaml new file mode 100644 index 0000000..833b47a --- /dev/null +++ b/docker_compose_applications/reverse-proxy/compose.yaml @@ -0,0 +1,12 @@ +# Links & Resources +# - https://hub.docker.com/_/nginx + +services: + caddy: + image: nginx + ports: + - "80:80" + - "443:443" + volumes: + - "./nginx.conf:/etc/nginx/nginx.conf:ro" + - "./conf.d/:/etc/nginx/conf.d/:ro" diff --git a/docker_compose_applications/reverse-proxy/conf.d/acme_challenge.conf b/docker_compose_applications/reverse-proxy/conf.d/acme_challenge.conf new file mode 100644 index 0000000..1a23cb7 --- /dev/null +++ b/docker_compose_applications/reverse-proxy/conf.d/acme_challenge.conf @@ -0,0 +1,23 @@ +map $host $upstream_acme_challenge_host { + pdf.consider-it.de 127.0.0.1:8000; + default ""; +} + +server { + listen 80 default_server; + + location /.well-known/acme-challenge/ { + proxy_pass http://$upstream_acme_challenge_host; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + # This is http in any case. + proxy_set_header X-Forwarded-Proto http; + } + + # Better safe than sorry. + # Don't do a permanent redirect to avoid acme challenge pain. + location / { + return 307 https://$host$request_uri; + } +} diff --git a/docker_compose_applications/reverse-proxy/nginx.conf b/docker_compose_applications/reverse-proxy/nginx.conf new file mode 100644 index 0000000..306fd98 --- /dev/null +++ b/docker_compose_applications/reverse-proxy/nginx.conf @@ -0,0 +1,50 @@ +# Modified nginx.conf from nginx Docker container from 2024-02-07, via the +# following command: +# docker run --rm --pull=always --entrypoint=cat nginx /etc/nginx/nginx.conf > ./nginx.conf + +user nginx; +worker_processes auto; + +error_log /var/log/nginx/error.log notice; +pid /var/run/nginx.pid; + + +events { + worker_connections 1024; +} + +# Listen on port 443 as a reverse proxy and use PROXY Protocol for the +# upstreams. +stream { + map $ssl_preread_server_name $address { + pdf.consider-it.de 127.0.0.1:44300; + } + + server { + listen 0.0.0.0:443; + listen [::]:443; + proxy_pass $address; + ssl_preread on; + proxy_protocol on; + } +} + +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/*.conf; +} diff --git a/inventories/hetzner/host_vars/cit-docker-host.yaml b/inventories/hetzner/host_vars/cit-docker-host.yaml index 0725752..03c46a0 100644 --- a/inventories/hetzner/host_vars/cit-docker-host.yaml +++ b/inventories/hetzner/host_vars/cit-docker-host.yaml @@ -1 +1,3 @@ -docker_compose__projects: [ ] +docker_compose__projects: + - name: reverse-proxy + files_directory: ../docker_compose_applications/reverse-proxy