Files
docker-infrastructure/torrents/NPM-WEBUI-LABELS.md
T

2.4 KiB

qBittorrent Web UI Instance Labels

The open and vpn instances are proxied via nginx-proxy-manager and have colored badges injected into the Web UI to distinguish them at a glance.

How it works

nginx's sub_filter module replaces </head> in the HTML response with a <style> block that adds a fixed-position badge in the top-right corner of the page.

open (qbto.kolpacksoftware.com) — blue badge vpn (qbtv.kolpacksoftware.com) — green badge

NPM Advanced tab config

For each proxy host, the following is set in the Advanced tab:

open:

sub_filter '</head>' '<style>body::after{content:"OPEN";position:fixed;top:5px;right:5px;background:#1565c0;color:#fff;padding:3px 10px;border-radius:3px;font-size:13px;font-weight:bold;z-index:99999;font-family:monospace;pointer-events:none;}</style></head>';
sub_filter_once on;
proxy_set_header Accept-Encoding "";

vpn:

sub_filter '</head>' '<style>body::after{content:"VPN";position:fixed;top:5px;right:5px;background:#2e7d32;color:#fff;padding:3px 10px;border-radius:3px;font-size:13px;font-weight:bold;z-index:99999;font-family:monospace;pointer-events:none;}</style></head>';
sub_filter_once on;
proxy_set_header Accept-Encoding "";

Important: manual fix required after saving in NPM UI

NPM regenerates the nginx conf file whenever you save a proxy host in the UI, which overwrites a necessary fix. After saving either proxy host, re-run:

# For open (proxy host 4):
sudo sed -i 's|    include conf.d/include/proxy.conf;|    proxy_set_header Accept-Encoding "";\n    include conf.d/include/proxy.conf;|' /srv/nginx-proxy/data/nginx/proxy_host/4.conf

# For vpn (proxy host 28):
sudo sed -i 's|    include conf.d/include/proxy.conf;|    proxy_set_header Accept-Encoding "";\n    include conf.d/include/proxy.conf;|' /srv/nginx-proxy/data/nginx/proxy_host/28.conf

docker exec nginx-proxy nginx -s reload

Why is this needed?

proxy_set_header Accept-Encoding "" must be inside the location / block for nginx to actually strip the header before forwarding to qBittorrent. When set at the server block level (via NPM's Advanced tab), it is silently ignored because the location block defines its own proxy_set_header directives via proxy.conf.

Without this fix, qBittorrent returns gzip-compressed responses and sub_filter cannot process them, so the badge never appears.