diff --git a/portainer/CHANGELOG.md b/portainer/CHANGELOG.md index 784a0ad687..8b0931382c 100644 --- a/portainer/CHANGELOG.md +++ b/portainer/CHANGELOG.md @@ -1,4 +1,7 @@ +## 2.44.0.1 (2026-08-05) +- Ingress: request uncompressed responses from Portainer so they carry a Content-Length and stay on the Home Assistant relay's buffered path. Portainer compresses its own responses, and the Accept-Encoding strip in proxy_params.conf never applied because the location block declares its own proxy_set_header directives, which makes nginx discard the server-level ones. Partial mitigation for #2766: the page itself and all assets under 4 MB are now buffered, but the two large JavaScript bundles still exceed the relay's 4 MB buffering threshold. Direct access on the web UI port keeps compression + ## 2.44.0 (2026-08-01) - Update to latest version from portainer/portainer (changelog : https://github.com/portainer/portainer/releases) diff --git a/portainer/config.yaml b/portainer/config.yaml index d701ebad53..cc02f3595e 100644 --- a/portainer/config.yaml +++ b/portainer/config.yaml @@ -42,4 +42,4 @@ schema: slug: portainer udev: true url: https://github.com/alexbelgium/hassio-addons -version: "2.44.0" +version: "2.44.0.1" diff --git a/portainer/rootfs/etc/nginx/nginx.conf b/portainer/rootfs/etc/nginx/nginx.conf index 7e5bc6f7cb..579cb4593c 100644 --- a/portainer/rootfs/etc/nginx/nginx.conf +++ b/portainer/rootfs/etc/nginx/nginx.conf @@ -49,6 +49,17 @@ http { '' close; } + # Ingress needs Portainer to answer uncompressed, so the responses carry a + # Content-Length and stay on the relay's buffered path. Direct access on + # 9099 does not go through the relay, so it keeps compression. + # Keyed on the direct-access port rather than the ingress port: the ingress + # port is templated from the add-on config, so defaulting to identity keeps + # ingress correct even if that port ever changes. + map $server_port $upstream_accept_encoding { + default identity; + 9099 $http_accept_encoding; + } + include /etc/nginx/includes/resolver.conf; include /etc/nginx/includes/upstream.conf; diff --git a/portainer/rootfs/etc/nginx/templates/ingress.gtpl b/portainer/rootfs/etc/nginx/templates/ingress.gtpl index 65001fe495..2c1cb9bcc1 100644 --- a/portainer/rootfs/etc/nginx/templates/ingress.gtpl +++ b/portainer/rootfs/etc/nginx/templates/ingress.gtpl @@ -20,5 +20,13 @@ server { proxy_set_header Upgrade $http_upgrade; proxy_set_header Host $http_host; proxy_set_header X-Forwarded-Host $http_host; + + # Portainer gzips its own responses, which makes them chunked with no + # Content-Length. Home Assistant's ingress relay only buffers responses + # under 4 MB that carry a Content-Length, so everything else falls into + # its streaming path. Asking upstream for identity keeps the small + # responses buffered. The map in nginx.conf applies this to the ingress + # listener only, so direct access on 9099 keeps compression. + proxy_set_header Accept-Encoding $upstream_accept_encoding; } }