mirror of
https://github.com/alexbelgium/hassio-addons.git
synced 2026-03-14 08:54:22 +01:00
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:
@@ -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}"
|
||||
|
||||
@@ -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';
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user