diff --git a/seerr/config.yaml b/seerr/config.yaml index 04901b09b..a4da17bf7 100644 --- a/seerr/config.yaml +++ b/seerr/config.yaml @@ -68,6 +68,7 @@ devices: environment: {} image: ghcr.io/alexbelgium/seerr-{arch} ingress: true +ingress_entry: /seerr ingress_port: 0 ingress_stream: true webui: "[PROTO:ssl]://[HOST]:[PORT:5055]" diff --git a/seerr/rootfs/etc/cont-init.d/32-nginx_ingress.sh b/seerr/rootfs/etc/cont-init.d/32-nginx_ingress.sh index a3f00c6c0..920c0cead 100644 --- a/seerr/rootfs/etc/cont-init.d/32-nginx_ingress.sh +++ b/seerr/rootfs/etc/cont-init.d/32-nginx_ingress.sh @@ -10,15 +10,9 @@ bashio::log.info "Configuring Nginx for ingress..." ingress_port=$(bashio::addon.ingress_port) ingress_interface=$(bashio::addon.ip_address) -ingress_entry=$(bashio::addon.ingress_entry) - -# Build escaped version of ingress_entry for JavaScript contexts (e.g., \/_next) -ingress_entry_escaped="${ingress_entry//\//\\\\/}" # Update ingress.conf with actual values sed -i "s|%%port%%|${ingress_port}|g" /etc/nginx/servers/ingress.conf sed -i "s|%%interface%%|${ingress_interface}|g" /etc/nginx/servers/ingress.conf -sed -i "s|%%ingress_entry_escaped%%|${ingress_entry_escaped}|g" /etc/nginx/servers/ingress.conf -sed -i "s|%%ingress_entry%%|${ingress_entry}|g" /etc/nginx/servers/ingress.conf bashio::log.info "Nginx ingress configured on ${ingress_interface}:${ingress_port}" diff --git a/seerr/rootfs/etc/nginx/servers/ingress.conf b/seerr/rootfs/etc/nginx/servers/ingress.conf index 41e47ecc9..5779a1b14 100644 --- a/seerr/rootfs/etc/nginx/servers/ingress.conf +++ b/seerr/rootfs/etc/nginx/servers/ingress.conf @@ -7,8 +7,13 @@ server { gzip_static off; client_max_body_size 0; - location / { - proxy_pass http://127.0.0.1:5055; + # Based on https://github.com/seerr-team/seerr/blob/develop/docs/extending-seerr/reverse-proxy.mdx + location ^~ /seerr { + set $app 'seerr'; + + # Remove /seerr path to pass to the app + rewrite ^/seerr/?(.*)$ /$1 break; + proxy_pass http://127.0.0.1:5055; # NO TRAILING SLASH proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; @@ -24,29 +29,27 @@ server { add_header 'Referrer-Policy' 'no-referrer'; # Redirect location headers - absolute_redirect off; - proxy_redirect ^ %%ingress_entry%%; - proxy_redirect /setup %%ingress_entry%%/setup; - proxy_redirect /login %%ingress_entry%%/login; + proxy_redirect ^ /$app; + proxy_redirect /setup /$app/setup; + proxy_redirect /login /$app/login; # Sub filters to replace hardcoded paths - # Based on https://github.com/seerr-team/seerr/blob/develop/docs/extending-seerr/reverse-proxy.mdx sub_filter_once off; sub_filter_types *; - sub_filter 'href="/"' 'href="%%ingress_entry%%"'; - sub_filter 'href="/login"' 'href="%%ingress_entry%%/login"'; - sub_filter 'href:"/"' 'href:"%%ingress_entry%%"'; - sub_filter '\/_next' '%%ingress_entry_escaped%%\/_next'; - sub_filter '/_next' '%%ingress_entry%%/_next'; - sub_filter '/api/v1' '%%ingress_entry%%/api/v1'; - sub_filter '/login/plex/loading' '%%ingress_entry%%/login/plex/loading'; - sub_filter '/images/' '%%ingress_entry%%/images/'; - sub_filter '/imageproxy/' '%%ingress_entry%%/imageproxy/'; - sub_filter '/avatarproxy/' '%%ingress_entry%%/avatarproxy/'; - sub_filter '/android-' '%%ingress_entry%%/android-'; - sub_filter '/apple-' '%%ingress_entry%%/apple-'; - sub_filter '/favicon' '%%ingress_entry%%/favicon'; - sub_filter '/logo_' '%%ingress_entry%%/logo_'; - sub_filter '/site.webmanifest' '%%ingress_entry%%/site.webmanifest'; + sub_filter 'href="/"' 'href="/$app"'; + sub_filter 'href="/login"' 'href="/$app/login"'; + sub_filter 'href:"/"' 'href:"/$app"'; + sub_filter '\/_next' '\/$app\/_next'; + sub_filter '/_next' '/$app/_next'; + sub_filter '/api/v1' '/$app/api/v1'; + sub_filter '/login/plex/loading' '/$app/login/plex/loading'; + sub_filter '/images/' '/$app/images/'; + sub_filter '/imageproxy/' '/$app/imageproxy/'; + sub_filter '/avatarproxy/' '/$app/avatarproxy/'; + sub_filter '/android-' '/$app/android-'; + sub_filter '/apple-' '/$app/apple-'; + sub_filter '/favicon' '/$app/favicon'; + sub_filter '/logo_' '/$app/logo_'; + sub_filter '/site.webmanifest' '/$app/site.webmanifest'; } }