Align ingress sub_filter rules with official Seerr reverse proxy docs

Co-authored-by: alexbelgium <44178713+alexbelgium@users.noreply.github.com>
This commit is contained in:
copilot-swe-agent[bot]
2026-02-19 12:50:14 +00:00
parent 99fc601f5b
commit 2078d51cbb
2 changed files with 27 additions and 37 deletions

View File

@@ -12,9 +12,13 @@ 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}"

View File

@@ -23,44 +23,30 @@ server {
add_header X-Frame-Options "SAMEORIGIN";
add_header 'Referrer-Policy' 'no-referrer';
# Correct base_url for ingress
# Redirect location headers
absolute_redirect off;
proxy_redirect / %%ingress_entry%%/;
proxy_redirect ^ %%ingress_entry%%;
proxy_redirect /setup %%ingress_entry%%/setup;
proxy_redirect /login %%ingress_entry%%/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 text/html text/css text/javascript application/javascript application/json;
# Rewrite Next.js static assets
sub_filter '/_next/' '%%ingress_entry%%/_next/';
# Rewrite API paths
sub_filter '"/api/v1' '"%%ingress_entry%%/api/v1';
sub_filter "'/api/v1" "'%%ingress_entry%%/api/v1";
sub_filter '`/api/v1' '`%%ingress_entry%%/api/v1';
# Rewrite image proxy paths
sub_filter '"/imageproxy' '"%%ingress_entry%%/imageproxy';
sub_filter '"/avatarproxy' '"%%ingress_entry%%/avatarproxy';
sub_filter "'/imageproxy" "'%%ingress_entry%%/imageproxy";
sub_filter "'/avatarproxy" "'%%ingress_entry%%/avatarproxy";
# Rewrite API docs path
sub_filter '"/api-docs' '"%%ingress_entry%%/api-docs';
# Rewrite root href/src references
sub_filter 'href="/' 'href="%%ingress_entry%%/';
sub_filter 'src="/' 'src="%%ingress_entry%%/';
sub_filter 'action="/' 'action="%%ingress_entry%%/';
sub_filter 'content="/' 'content="%%ingress_entry%%/';
# Rewrite fetch/router paths in JavaScript
sub_filter 'fetch("/' 'fetch("%%ingress_entry%%/';
sub_filter "fetch('/" "fetch('%%ingress_entry%%/";
sub_filter 'fetch(`/' 'fetch(`%%ingress_entry%%/';
sub_filter 'router.push("/' 'router.push("%%ingress_entry%%/';
sub_filter "router.push('/" "router.push('%%ingress_entry%%/";
sub_filter 'router.push(`/' 'router.push(`%%ingress_entry%%/';
sub_filter 'router.replace("/' 'router.replace("%%ingress_entry%%/';
sub_filter "router.replace('/" "router.replace('%%ingress_entry%%/";
sub_filter 'window.location.href="/' 'window.location.href="%%ingress_entry%%/';
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';
}
}