From 788fb420ace464f4f92b745c3a7f58408e00bb6a Mon Sep 17 00:00:00 2001 From: Mayel de Borniol Date: Sat, 18 Oct 2025 14:49:12 +0100 Subject: [PATCH] add FALLBACK_REDIRECT_URL to be able to redirect any unknown paths to a different domain --- .env.sample | 9 ++++++++- abra.sh | 4 ++-- compose.yml | 3 +++ default.conf.tmpl | 24 +++++++++++++++++++----- entrypoint.git-pull.sh | 2 +- 5 files changed, 33 insertions(+), 9 deletions(-) diff --git a/.env.sample b/.env.sample index 98d1b56..70d33d8 100644 --- a/.env.sample +++ b/.env.sample @@ -6,6 +6,7 @@ DOMAIN=custom-html.example.com LETS_ENCRYPT_ENV=production COMPOSE_FILE="compose.yml" +HTML_ROOT=/usr/share/nginx/html # Single Sign On via Traefik "file provider" #COMPOSE_FILE="$COMPOSE_FILE:compose.sso.yml" @@ -13,7 +14,9 @@ COMPOSE_FILE="compose.yml" # Git-pull regularly #COMPOSE_FILE="$COMPOSE_FILE:compose.git-pull.yml" #GIT_REPO_URL="https://git.coopcloud.tech/dalmationer/hexbomb.gay" -#CRON_SCHEDULE="*/1 * * * *" +#GIT_BRANCH=main +#CRON_SCHEDULE="*/10 * * * *" # Default: every 10 minutes +# HTML_ROOT=/git # Optionally redirect the entire domain or a sub-path: # path under which you want to redirect all URLs (with trailing slash): @@ -27,6 +30,10 @@ COMPOSE_FILE="compose.yml" # Optionally handle all URL requests using a single file (commonly index.html) #SINGLE_PAGE_SITE_HANDLER=/index.html +# Optionally redirect URL requests if not file is found for the requested path +# FALLBACK_REDIRECT_URL=https://coopcloud.tech/ +# FALLBACK_REDIRECT_TYPE=302 + # Enable an SSH server to allow SFTP uploads to the web root #COMPOSE_FILE="$COMPOSE_FILE:compose.sftp.yml" #PUBLIC_KEY="ssh-ed25519 AAAAC3NzaJ1lZDI1NTE5AAAAIXqf4nxUxuGmLOaxXXXXXXXXoM/GwhcrAgmtbgXToaYmCJ user@host" # Replace with a public key you generate \ No newline at end of file diff --git a/abra.sh b/abra.sh index 3ad0c18..e75b349 100644 --- a/abra.sh +++ b/abra.sh @@ -1,2 +1,2 @@ -export NGINX_DEFAULT_CONF_VERSION=v6 -export ENTRYPOINT_CONF_VERSION=v3 +export NGINX_DEFAULT_CONF_VERSION=v10 +export ENTRYPOINT_CONF_VERSION=v4 diff --git a/compose.yml b/compose.yml index d22dbb4..829633b 100644 --- a/compose.yml +++ b/compose.yml @@ -24,9 +24,12 @@ services: - "backupbot.backup.path=/usr/share/nginx/html" environment: - DEFAULT_CONF_FILE=/etc/nginx/conf.d/default.conf + - HTML_ROOT - REDIRECT_FROM_PATH - REDIRECT_TO_URL - REDIRECT_TYPE + - FALLBACK_REDIRECT_URL + - FALLBACK_REDIRECT_TYPE volumes: - content:/usr/share/nginx/html configs: diff --git a/default.conf.tmpl b/default.conf.tmpl index 2262be6..6161752 100644 --- a/default.conf.tmpl +++ b/default.conf.tmpl @@ -8,20 +8,34 @@ server { #access_log /var/log/nginx/host.access.log main; location / { - root /usr/share/nginx/html; + root {{ env "HTML_ROOT" }}; index index.html index.htm; - + {{ if env "REDIRECT_TO_URL" }} rewrite ^{{ env "REDIRECT_FROM_PATH" }}(.*)$ {{ env "REDIRECT_TO_URL" }}$1 {{ env "REDIRECT_TYPE" }}; {{ end }} - {{ if env "SINGLE_PAGE_SITE_HANDLER" }} - try_files $uri $uri/ {{ env "SINGLE_PAGE_SITE_HANDLER" }} =404; + {{ if env "FALLBACK_REDIRECT_URL" }} + # redirect unknown URLs (no matching files) to other address + try_files $uri $uri/ @fallback_redirect; {{ else }} - try_files $uri $uri/ $uri.html =404; + {{ if env "SINGLE_PAGE_SITE_HANDLER" }} + # serve SPA handler + try_files $uri $uri/ {{ env "SINGLE_PAGE_SITE_HANDLER" }} =404; + {{ else }} + # serve static files or regular 404 as usual + try_files $uri $uri/ $uri.html =404; + {{ end }} {{ end }} } + {{ if env "FALLBACK_REDIRECT_URL" }} + location @fallback_redirect { + return {{ env "FALLBACK_REDIRECT_TYPE" }} {{ env "FALLBACK_REDIRECT_URL" }}$request_uri; + } + {{ end }} + + # Standard static 404 error page error_page 404 /404.html; location = /404.html { root /usr/share/nginx/html; diff --git a/entrypoint.git-pull.sh b/entrypoint.git-pull.sh index 16682ef..5278491 100644 --- a/entrypoint.git-pull.sh +++ b/entrypoint.git-pull.sh @@ -4,7 +4,7 @@ if [ ! -d /git/.git ]; then echo "No repo found, emptying /git/ directory" rm -r /git/* echo "Cloning $GIT_REPO_URL into /git" - git clone "$GIT_REPO_URL" /git + git clone -b "$GIT_BRANCH" --single-branch "$GIT_REPO_URL" /git else echo "Updating /git" git pull