Use case

Proxies for Langflow: a security default decides whether yours is used

Why Langflow flows ignore HTTPS_PROXY: SSRF protection is on by default and builds a pinned client. What switching it off costs, and where to route instead.

HProxy Team··Updated September 20, 2026·6 min read
HProxy.Use case

Free proxies won't hold up here.

Shared datacenter IPs get flagged and dropped fast. When it has to hold, gaming, streaming, accounts, you need mobile and residential IPs that read as a real device, from $0.44/GB, pay as you go.

See plans & pricing

Langflow builds flows in a browser and runs them on a server. Every URL component and every API request leaves from the server's address. The obvious way to change that address is a proxy variable on the machine. On a default installation it will not be used, and a security setting is why. We read release v1.12.2 on 20 September 2026.

One warning first. A search for the word proxy here returns hundreds of files. Almost all are two other things: a helper that points the frontend at the backend, and a component that routes model calls through a gateway. Neither one touches the address your requests come from.

Two clients

Both fetching components end their client factory with the same two lines:

if is_ssrf_protection_enabled() and validated_ips:
    return create_ssrf_protected_client(hostname=hostname, validated_ips=validated_ips)
return httpx.AsyncClient()

The second is an ordinary client, and an ordinary client reads the usual proxy variables. The first is built on a custom transport. That transport pins the addresses already validated for the hostname and connects straight to them. It also replaces the part of the library that would have applied your environment proxy, and the factory passes no proxy of its own.

The setting is ssrf_protection_enabled, it defaults to true, and it can be switched with LANGFLOW_SSRF_PROTECTION_ENABLED.

They did not hide the clash. The protected transport takes a proxy argument and refuses it:

DNS pinning with proxies is not currently supported

That error exists in both transports. Pinning an address and handing the connection to a proxy are two answers to one problem. This project picked pinning.

The switch and its price

You can turn the protection off and get your proxy back. Before you do, read what it was doing.

With protection on, a URL is resolved first. It is refused if it points at a private, loopback, link local or cloud metadata address. Redirects are not followed by the client at all. The component follows them itself, so every hop is checked again. Their reason: a validated public URL can redirect to an internal one that was never checked.

ChoiceYou gainYou give up
leave the protection onprivate targets refused, redirects re-validatedyour proxy on these components
switch it offthe usual environment proxy behaviourboth of those protections
route below the applicationboth, and a different addressa little setup on the host

Routing underneath

The third row is the one we would pick, and it is the general answer whenever a tool pins its own addresses.

A pinned client connects straight to an address it checked. Nothing inside the process can redirect that, which is the point. Everything outside the process still can: the container's network, the host's routing, a forwarder the machine sends traffic through. Route there and the component never has to know. The protection it was given stays in place.

That is more setup than exporting a variable. It is also the only way to have both.

The MCP exception

One more place a proxy variable appears, and it is blocked on purpose.

A flow can embed a configuration for an MCP server that Langflow then runs. The proxy variables are blocked for those configurations, next to the certificate bundle variables and the package manager settings. Their comment gives the reason. A proxy override redirects a fetch somebody else set up, towards a host the flow author controls.

The rule is careful. The no proxy variable is deliberately not blocked. It can only narrow proxy use, never redirect anything.

So giving an MCP server its own address from inside a flow is closed by design. Set it in the environment of the server itself.

Which proxy type fits it?

Residential, for the sources that answer a hosting address differently. Our own paired test is the size of that effect: 4 of 13 sites answered a residential address differently from a server one, with plain requests of the kind these components send.

The routing belongs to the host rather than the application, which suits address authentication: one machine, allowed by its address, with no password in a flow or a settings file. On a Residential Premium plan your machine's address can be allowed, up to 150 per plan. Flows fetch pages and APIs rather than media, so a per gigabyte line goes a long way. The residential proxies page lists the plans, and the plan API manages allowed addresses from code.

What breaks

  • Flows still leave from the server address. The protection is on, so the client is the pinned one.
  • A flow fails with an unsupported message. Something passed a proxy to the pinned transport. That combination raises by design.
  • Turning the protection off fixed the proxy and broke something else. Redirect re-validation went with it.
  • An MCP server ignores the proxy you set in the flow. Those variables are blocked for flow supplied configurations.
  • You searched the code for proxy and found hundreds of hits. Most are a frontend helper and a model gateway component.

What this page does not cover

We read the release as text and did not run Langflow. So we did not watch a flow use an address, did not switch the setting and did not measure a run's traffic. We also did not prove by experiment that the pinned client ignores the environment. We describe what the code builds and what that means. A reader who needs certainty should test it on their own instance. We read the two fetching components, the transport, the protection helper, the security settings and the MCP blocklist closely, and used a code search rather than reading a very large repository. This project releases about weekly and its branch was pushed to hours before we read it. We will read it again by 20 October 2026.

Where to go from here

Proxies for nanobot covers the same conflict resolved the other way, by dropping the pinning when a proxy is configured. Proxies for PicoClaw covers a third answer, keeping the guard and allowing one hop to your proxy. Proxies for World Monitor covers a fourth, moving the fetch to a second host entirely.

Sources

  • The client factory in both fetching components, the pinned transport and its refusal of a proxy, the protection helper and its environment variable, the security settings default, and the manual redirect re-validation (src/lfx/src/lfx/components/data_source/api_request.py, components/data_source/url.py, utils/ssrf_transport.py, utils/ssrf_protection.py, services/settings/groups/security.py). langflow-ai/langflow, release v1.12.2 of 16 September 2026, read 20 September 2026.
  • The blocked environment variables for flow supplied MCP server configurations, and the comment explaining why the no proxy variable is not among them (src/lfx/src/lfx/base/mcp/security.py). Same release.
  • Our paired address test of 19 September 2026: 16 URLs, plain requests, two runs from our server and two through a residential line of our house plan. Raw output is kept in the research folder of our OpenClaw page.
  • Plans, allowed addresses and per gigabyte pricing. HProxy documentation, hproxy.com/docs, 20 September 2026.

Frequently asked questions

Does Langflow have a proxy setting?
No. Whether your environment proxy is used depends on a security setting, because that setting decides which kind of HTTP client the fetching components build.
Why do my flows ignore HTTPS_PROXY?
SSRF protection is on by default. With it on, the URL and API Request components build a client on a custom transport that connects to validated addresses directly, and that transport does not consult the environment.
Is the conflict documented?
In the code. Passing a proxy to that transport raises an error reading: DNS pinning with proxies is not currently supported.
What do I lose if I switch the protection off?
The refusal of private and metadata addresses, and the re-validation of every redirect hop. Their own comment explains that a validated public URL can redirect to an internal one.
Can a flow give an MCP server a proxy?
No. The proxy variables are on the blocked list for server configurations supplied in a flow. The no proxy variable is deliberately allowed, because it can only narrow proxy use.

Proxies that don't die mid-job

Residential, ISP, datacenter and mobile, verified by the same engine that runs tens of millions of checks. They read as a real device and hold up under load. Pay as you go, and your balance never expires. $0.44/GB is the 2,000 GB+ rate; a single gigabyte is $0.50/GB, with no minimum order.

129M+ proxy checks run · 100+ countries · HTTP / HTTPS / SOCKS · re-checked every few minutes · no signup

HProxy.

Honest guides and comparisons on proxies, scraping and staying unblocked, from the team that runs the network.

RSS feed