n8n 2.36.9 - Proxy Env Vars Across Processes


n8n tag [email protected] landed on 31 August 2026. It is a stable patch, not a prerelease. The notes list one core bug fix. Proxy environment variables now apply the same way across packages and processes, so workers and CLI no longer skip HTTP_PROXY.

The full release notes and downloads are on the GitHub release page.

Until this tag, installGlobalProxyAgent() ran when the main Server class wired its HTTP routes. Workers, webhook processors, and one off CLI commands kept Node’s default agents. Default agent HTTP from those processes ignored HTTP_PROXY, HTTPS_PROXY, ALL_PROXY, and NO_PROXY.

Commit a3e3b6a from PR #37258 moves the install to the first line of BaseCommand.init(). That runs before any outbound call, including Sentry. server.ts no longer calls the installer. BaseCommand is the single source of truth for process wide proxy agents.

Queue mode is where this shows up in production. Set HTTPS_PROXY and NO_PROXY on a worker and start it. Outbound HTTP from that worker now reaches the proxy. Before [email protected] the worker connected directly even when those variables were set. Jobs that fetch SaaS APIs, object storage, or the npm registry during community node install from a worker were the ones that missed the proxy.

Main process traffic was already going through the env proxy agents. This patch applies the same install to the process types that actually run the work.

The same commit adds N8N_OUTBOUND_PROXY_MODE. Allowed values are all (the default) and main-only.

With all, every process type installs the agents: main, workers, webhook processors, and one off CLI. There is no implicit bypass. localhost is not exempt unless it is listed in NO_PROXY. Loopback services, Kubernetes service DNS, and object storage inside the cluster that must be reached directly belong in NO_PROXY. List those hosts. Do not assume the runtime will skip local addresses for you.

main-only restores the old behavior. Only the main server process installs the agents. Default agent HTTP in every other process connects directly. HTTP clients that resolve the proxy environment variables per request still do so in every process, regardless of this setting.

The variable exists because some deployments tuned NO_PROXY for the main process alone. Flipping to main-only is a temporary escape, not a long term config. The project marks it deprecated. Setting it to main-only logs a deprecation warning at startup. An unrecognized value logs a warning and falls back to all.

The config class is packages/@n8n/config/src/configs/outbound-proxy.config.ts, bound with @Env('N8N_OUTBOUND_PROXY_MODE'). Leave the default and extend NO_PROXY rather than switching the mode.

Not every outbound call went through the shared global agents. The web fetch helper in packages/@n8n/ai-workflow-builder.ee now sets proxy: false on its Axios config. Axios’s own env proxy handling mishandles https targets behind an http proxy. With no explicit Axios proxy, the request uses the process wide env proxy global agents. Routing then follows HTTP_PROXY, HTTPS_PROXY, and NO_PROXY on every hop.

The SSRF guard’s secure lookup still runs. Tests assert that a NO_PROXY direct path still calls the per request lookup, so DNS rebinding checks survive the global agent. EnvProxyHttpAgent and EnvProxyHttpsAgent no longer pass an undefined lookup into the parent Agent constructor. They spread lookup only when it is set.

Tests in web-fetch.proxy-routing.test.ts cover an HTTP fetch routed through HTTP_PROXY, an HTTPS fetch sent to HTTPS_PROXY as a CONNECT to the target host, and a direct connect when NO_PROXY excludes the host.

The community package scanner lives outside the n8n process. It keeps Axios’s own env proxy resolution, which already honors HTTP_PROXY, HTTPS_PROXY, and NO_PROXY per hop. The scanner change in this commit is a 300 second Axios default timeout so a stalled registry or tarball request does not hang the scan.

This is a behavioral change for queue mode and for any worker, webhook, or CLI process that makes default agent HTTP. It is not a schema migration and the notes do not list a breaking API.

Before you roll [email protected]:

  • Confirm HTTP_PROXY, HTTPS_PROXY, ALL_PROXY, and NO_PROXY are set on workers and webhook processors the same way they are set on main. Env injected only into the main container is no longer enough if those processes now honor the variables.
  • Expand NO_PROXY for every internal hostname the deployment must reach directly. Include localhost, Kubernetes service DNS, and object storage inside the cluster if those used to bypass the proxy only because workers ignored the env.
  • If a rollout starts sending worker traffic through a proxy you did not intend, set N8N_OUTBOUND_PROXY_MODE=main-only as a short term rollback of the new install path. Plan to drop that variable and fix NO_PROXY instead.
  • Watch startup logs for the deprecation warning if the mode is main-only.

No other items shipped in this tag. The diff from [email protected] to [email protected] is on the compare view.