n8n workflows go out from one IP by default, which is fine until you are enriching leads, checking prices or scraping at volume and start getting rate limited. Point the HTTP Request node at your Proxy Rotator gateway and every call can leave from a different residential, datacenter, mobile or IPv6 address.
Per-node or global Cloud & self-hosted New IP per request
One gateway, standard protocols, nothing to install into n8n.
Point a node at the rotating endpoint and the gateway hands out a different IP on every connection, so a loop over a thousand items does not hammer a target from one address.
n8n's HTTP Request node has a built-in Proxy option. Paste one URL into it and that node is proxied. No Code node, no community package, no workflow redesign.
Residential, datacenter, mobile and IPv6 from a single account. Use datacenter for a tolerant API and residential for a site that blocks bots, in the same workflow.
Some flows log in, then act. A sticky port holds one IP across those steps so the session is not invalidated between nodes.
Collect localised pricing or search results by pinning the gateway to a country, and to a city on residential, so the data matches the market you meant.
Agent nodes that browse and gather sources hit the same rate limits as any scraper. See proxies for AI agents for how to structure that.
Per node, or globally for the whole instance. They can coexist, and one wins.
| Per-node Proxy option | Global environment variables | |
|---|---|---|
| Where you set it | HTTP Request node, under Options | The instance's environment |
| Scope | That one node | Every node that makes HTTP calls |
| Works on n8n Cloud | Yes | No, you cannot set env vars there |
| Works self-hosted | Yes | Yes |
| Mix proxied and direct calls | Yes, node by node | Only via a NO_PROXY list |
| Precedence | Wins. Overrides the global setting | Applies where no node option is set |
| Best for | Most workflows, and anything on Cloud | Self-hosted instances that should always proxy |
n8n's own documentation states the node option takes precedence over the global variables.
The quickest route, and the only one that works on n8n Cloud.
Open Proxy Gateways in your Proxy Rotator dashboard. Copy the host, the port for the proxy type and location you want, and your username and password. Use a rotating port for collection work and a sticky port for anything that logs in.
In your workflow, open the HTTP Request node, scroll to Options and click Add option. Choose Proxy from the list.
The field takes a single proxy URL with credentials embedded. That is the whole configuration.
http://USER:PASS@gateway.proxyrotator.com:8080
@ or a : in the password will otherwise be read as part of the host, and the request will fail with a confusing connection error. Alternatively, whitelist your n8n server's public IP in your dashboard and drop the credentials from the URL entirely.Point the node at an IP echo endpoint and execute it. It should return an address that is not your server's. Execute it twice against a rotating port and you should see two different IPs, which confirms rotation is live.
A test node that returns the exit IP the workflow is using.
If you run n8n yourself and want everything to go out through the gateway, set it in the environment instead of on each node. n8n reads the standard variables: HTTP_PROXY for unencrypted traffic, HTTPS_PROXY for TLS traffic, and ALL_PROXY as a fallback used when neither of the more specific ones is present.
# Route all node HTTP traffic through the gateway. # Both variables point at the same endpoint - the proxy itself # speaks HTTP, and tunnels TLS requests through CONNECT. docker run -d --name n8n -p 5678:5678 \ -e HTTP_PROXY="http://USER:PASS@gateway.proxyrotator.com:8080" \ -e HTTPS_PROXY="http://USER:PASS@gateway.proxyrotator.com:8080" \ -e NO_PROXY="localhost,127.0.0.1,n8n.example.com" \ -v n8n_data:/home/node/.n8n \ docker.n8n.io/n8nio/n8n
NO_PROXY takes a comma-separated list of hostnames that should bypass the proxy entirely. Put your own domain, localhost and any internal service on it. Without that, n8n's own webhook callbacks and any internal API you call will take a pointless detour out through the proxy and back, which is slow at best and broken at worst.
proxy-from-env package, and lowercase wins. If something on the host already exports http_proxy in lowercase, it silently overrides the HTTP_PROXY you just set, and your traffic quietly goes somewhere else. If the proxy appears to be ignored, check for both spellings before anything else.Environment variables end up in shell history, process listings and container inspect output. If that bothers you, whitelist the server's public IP in your dashboard and use a credential-free proxy URL, http://gateway.proxyrotator.com:8080. The gateway authorises the IP instead, and there is no secret to leak.
It depends on whether the workflow has a session. Most n8n work is stateless: fetch a page, enrich a record, check a price. For those, use a rotating port so every request in the loop leaves from a different IP and no single address carries the whole run.
Some workflows are stateful. If a flow signs in with one node and then acts with the next, a rotating IP between those two steps looks like the session moved country mid-request, and most services will end it. Point those workflows at a sticky port so the address holds across the steps.
You can do both in one workflow, because the proxy is set per node. Give the login node a sticky port and the bulk-collection node a rotating one.
The HTTP Request node has a Batching option that limits how many items go out per batch and adds an interval between them. Combined with rotation it is the difference between a workflow that finishes and one that gets blocked: rotation spreads requests across addresses, batching spreads them across time. A target seeing a thousand requests from a thousand IPs over ten minutes behaves very differently from one seeing them from one IP in ten seconds.
Also worth setting on any proxied node: raise Timeout, since a proxied request has an extra hop and residential routes are slower than your datacenter's direct connection. The default can be tight enough to cause spurious failures.
The failures we see most, and what actually fixes them.
| Symptom | Likely cause | Fix |
|---|---|---|
| Global proxy seems ignored | A lowercase http_proxy is overriding your uppercase one | Check for both spellings and remove the stray one |
| Env vars do nothing on n8n Cloud | Expected. You cannot set env vars on Cloud | Use the node's Proxy option instead |
| One node ignores the global proxy | Working as designed. The node option takes precedence | Clear the node's Proxy option, or set it correctly |
| Connection error with a valid proxy | Unencoded @ or : in the password | Percent-encode it, or switch to IP-whitelist auth |
| Auth rejected from a cloud host | IP-whitelist auth, and the server's egress IP is not listed | Whitelist the real egress IP, or use user:pass |
| Webhooks or internal calls break | Internal traffic is being sent through the proxy | Add those hostnames to NO_PROXY |
| Intermittent timeouts | Default timeout too tight for a proxied route | Raise Timeout in the node's Options |
| Session drops between nodes | Rotating port, so each node got a different IP | Use a sticky port for the stateful part of the flow |
Before debugging the workflow, confirm the credentials from the machine n8n runs on. This should print an IP that is not the server's.
curl -x http://USER:PASS@gateway.proxyrotator.com:8080 https://api.ipify.org
One plan, one set of credentials, every tool at once.
Endpoint details, protocols and code samples in every language.
Read the docsSticky within a task, rotating across agents.
Read the guideWhen a workflow outgrows n8n and needs a real crawler.
View setup guideFor pages that need a real browser to render.
View setup guideHow to structure large collection jobs without getting blocked.
Read the guideEvery supported tool, with copy-paste setup guides.
Browse all guideshttp://USER:PASS@gateway.proxyrotator.com:8080. That node then routes through the proxy. On a self-hosted instance you can instead set HTTP_PROXY and HTTPS_PROXY to proxy every node at once.HTTP_PROXY approach is self-hosted only. For most workflows the node option is the better choice anyway, since it lets you proxy some calls and not others.HTTP_PROXY, HTTPS_PROXY and ALL_PROXY variables. So a node with its own proxy set ignores the instance-wide setting.http_proxy also exists in the environment. n8n reads these through the proxy-from-env package, where lowercase takes priority over uppercase, so the lowercase value silently wins. Check for both spellings. The other common cause is a node with its own Proxy option set, which overrides the global one.localhost, your own n8n domain and any internal services on it. Without it, webhook callbacks and internal API calls get routed out through the proxy and back, which is slow and often simply fails.http://gateway.proxyrotator.com:8080. The gateway authorises the IP, so there is no password sitting in your environment or container config.Residential, datacenter, mobile and IPv6 proxies on one gateway, set with a single field in the HTTP Request node. From $24.95/mo.