Server to Server

Hosted Proxy

Point one of your domains at any public URL and we forward the traffic from the edge. No CLI to install, and no terminal left running overnight.

Why it exists

The ProxyLens CLI exists to reach servers we cannot: something on localhost, or behind your office firewall. That is a real constraint, and a tunnel is the only way across it.

When your target is already a public URL, that constraint disappears. A staging API, a third-party service you want to watch, a webhook receiver already deployed — our edge can reach all of them directly. Hosted proxy skips the tunnel entirely, which means the domain keeps serving whether or not your laptop is open.

CLI Tunnel
VisitorProxyLens edgeyour CLIlocalhost:3000
Hosted Proxy
VisitorProxyLens edgehttps://your-api.com

One hop fewer, and nothing on your machine to keep alive.

Which mode should I use?

Your target isUseWhy
localhost:3000CLI TunnelOnly your machine can reach it.
A server on a private networkCLI TunnelThe tunnel is what crosses the firewall.
https://staging.you.comHosted ProxyAlready public, so no tunnel is needed.
A webhook receiver you want to watch around the clockHosted ProxyKeeps running with nothing open on your desk.
A third-party API you want to inspectHosted ProxyYou do not control it, so you cannot run a CLI beside it.

The choice is per domain and you can switch at any time — the inspector, replay and flow recording work identically either way.

Setting it up

1

Pick a domain

Open Dashboard → Domains and register one, or use a domain you already have. Any type works: a free .proxylens.dev subdomain, a generated one, or your own custom domain.

Custom domains must finish DNS verification first. Hosted proxy is refused on a domain that is still pending.
2

Set the traffic source

Click the icon on the domain row, choose Hosted URL, and enter your target.

https://api.your-company.com

A path is allowed and becomes a prefix, so a target of https://api.your-company.com/v1 turns an incoming request for /users into /v1/users. Query strings and fragments in the target are ignored — those come from the incoming request.

3

It is live

There is no third step. The change takes effect on the next request.

$ curl https://my-api.proxylens.dev/users
{ "users": [ ... ] }
# served from https://api.your-company.com/users
# and recorded in the inspector

Open the inspector to watch it live. Requests through a hosted proxy look exactly like tunnelled ones — same timeline, same replay, same WebSocket transcripts.

What reaches your server

The method, path, query string and body are passed through untouched. Headers are adjusted so your origin sees a well-formed request rather than a replay of our edge.

HeaderWhat we do
X-Forwarded-ForSet to the visitor's IP address.
X-Forwarded-HostSet to the ProxyLens domain the request arrived on.
X-Forwarded-ProtoSet to the incoming scheme.
HostRewritten to your target's host, so virtual hosting works.
CF-*, CDN-LoopRemoved. An origin that also sits behind Cloudflare rejects requests that arrive with these already set.
Everything elseForwarded as sent, including cookies and authorization.
Redirects pass through

A 301 or 302 from your server is handed to the visitor rather than followed at the edge, so redirect chains behave as they would without us.

Responses stream

Bodies are streamed to the visitor as they arrive. Large downloads are not buffered waiting on the inspector, which records its own copy in parallel.

WebSockets

WebSocket upgrades are proxied too. We open a matching connection to your target and pipe frames in both directions, recording every one.

const ws = new WebSocket('wss://my-api.proxylens.dev/socket');

The transcript shows every frame in each direction with its size and timing, and you can inject a frame into a live connection from the inspector — useful for reproducing a client message without touching the client.

Restrictions

A hosted proxy makes our edge fetch a URL on a visitor's behalf, so some targets are refused when you save them rather than failing later.

  • Private and loopback addresses

    localhost, 10.x, 172.16–31.x, 192.168.x, 169.254.x and IPv6 equivalents. Our edge cannot reach your private network — that is what the CLI is for.

  • Other ProxyLens domains

    Pointing one hosted domain at another loops traffic through the edge. We refuse the target, and a loop that forms anyway is stopped at the second hop.

  • Credentials in the URL

    https://user:pass@host is rejected. Send authentication as a header instead.

  • Non-HTTP schemes

    Targets must be http:// or https://.

Only proxy what you own or are authorised to serve. Hosted domains run under our name and certificate, and we act on abuse reports.

Availability

Free
CLI tunnels only
Pro
Up to 3 hosted domains

Hosted domains serve continuously rather than only while a CLI is attached, so they are metered separately from tunnels. Need more than three? Talk to us.