Skip to content
NextProxyNextProxyDocs

Troubleshooting flow

Systematic diagnostic paths by symptom: can't connect, wrong IP, slow, or blocked by the target site.

Find the section matching your symptom and work down in order. Each step is independently verifiable — don't skip ahead, because skipping usually means changing three things and not knowing which one helped.

Universal first step: minimal reproduction

Whatever the symptom, establish a baseline with the shortest possible curl command. This alone eliminates half of all problems (client library configuration, connection pooling, application logic).

shell
# 1. No options at all
curl -v -x 'http://USERNAME:PASSWORD@GATEWAY_HOST:58971' https://api.ipify.org

# 2. Once that works, add a country
curl -v -x 'http://USERNAME-country-US:PASSWORD@GATEWAY_HOST:58971' https://api.ipify.org

# 3. Once that works, add everything you actually use
curl -v -x 'http://USERNAME-country-US-state-California-city-Los%20Angeles-session-t1-time-30:PASSWORD@GATEWAY_HOST:58971' https://api.ipify.org

Can't connect at all

Getting 407

Read X-NextProxy-Error first: proxy_auth_required means missing or unparseable authentication; invalid_credentials means the username or password does not match. For the latter, copy the original console text and check case plus I, l and 1; do not reconstruct credentials from screenshots.

Confirm the client actually sent the auth header

shell
curl -v -x 'http://USERNAME:PASSWORD@GATEWAY_HOST:58971' https://api.ipify.org 2>&1 | grep -i proxy-auth

You should see > Proxy-Authorization: Basic .... Its absence means the client is misconfigured.

The usual traps per language: Java needs jdk.http.auth.tunneling.disabledSchemes=""; axios needs proxy: false; Puppeteer needs page.authenticate(). See the relevant integration guide.

Confirm the shell didn't eat your credentials

$, ! and & in a password get expanded under double quotes or no quotes. Use single quotes.

shell
# Dangerous
curl -x "http://user:p@ss!word@host:58971" ...

# Safe
curl -x 'http://user:p@ss!word@host:58971' ...

Confirm there aren't duplicate auth headers

A client configured with both userinfo in the proxy URL and an extra header sends two Proxy-Authorization headers, which the gateway rejects.

Getting 400

invalid_proxy_parameters means invalid username option syntax, order, range or dependency. Test the base username without options, then add them one at a time; check the username option reference. For invalid_request, inspect the request and destination format.

Getting 403

Use X-NextProxy-Error to separate the causes:

  • account_disabled / account_expired: check account status and expiry in the console.
  • access_denied: check account permissions, source bindings and port authentication mode; passwordless ports must not receive username/password credentials.
  • target_denied: test an allowed public destination and check target restrictions.

A destination 403 after 200 Connection Established belongs to the website and does not indicate an incorrect proxy password.

Getting 402

For traffic_exhausted, check the shared user traffic pool; for account_quota_exhausted, check the sub-account cap minus usage; for quota_exhausted, check available quota. A positive pool balance does not guarantee admission when a sub-account cap is exhausted. Reconnecting cannot restore quota. See proxy sub-accounts.

Getting 429

connection_limit means account concurrency or connection rate reached the limit. Reduce concurrency, reuse connections where suitable and back off instead of reconnecting in a burst. Source-IP/global protection before protocol detection may close TCP directly; see limits and quotas.

Getting 502, 503 or 504

  • 502 upstream_connection_failed: exit connection or handshake failed.
  • 503 service_unavailable: no matching proxy IP or a service is temporarily unavailable.
  • 504 upstream_timeout: proxy connection establishment timed out.

For 503, remove city, state and country one at a time and copy exact geographic values from the console catalogue. See geographic targeting. If a sticky session is unavailable, choose a new session value to start a new session; the new session may use a different exit IP.

For requests safe to replay, retry up to three times with backoff. If failures persist, provide the time, gateway, machine code and redacted logs for operator diagnosis. Authentication or policy errors during exit connection establishment return gateway 502; they do not require changing otherwise correct proxy credentials.

The connection drops with no response at all

This happens before protocol detection, too early to build an HTTP response:

  • Global connection count or per-source-IP concurrency at its ceiling
  • New connection rate exceeded (1,000/s per IP)
  • More than 5 seconds waiting for the first byte
  • Gateway resources at the high-water mark

What to do: reduce concurrency and connection establishment rate. Note that under resource pressure only new connections are refused while existing ones continue normally — which is exactly why "old jobs are fine, new jobs can't connect".

Wrong exit IP

The IP didn't change at all (same as direct)

shell
echo "direct: $(curl -s https://api.ipify.org)"
echo "proxy:  $(curl -sS -x 'http://USER-country-US:PASS@GATEWAY_HOST:58971' https://api.ipify.org)"

Identical values mean the proxy was never used:

Possible causeHow to check
NO_PROXY / no_proxy excludes the target domainecho $NO_PROXY
The proxy configuration in code never took effectaxios missing proxy: false; Node's native fetch without a dispatcher
A proxies value written as https://The gateway has no inbound TLS; values must be http://

The location isn't the country I asked for

shell
curl -sS -x 'http://USER-country-DE:PASS@GATEWAY_HOST:58971' https://ipinfo.io/json

If country isn't DE:

  1. Confirm the value is two uppercase lettersde is rejected (400 invalid_proxy_parameters), not normalised to DE
  2. If you get a 200 with the wrong country, cross-check against another geolocation database — they genuinely disagree

The city doesn't match

An IP that should be fixed keeps changing

CauseHow to check
time expiredCheck whether the session duration covers the whole flow
Inconsistent case in sessionJob1 and job1 are two sessions
The original exit IP is no longer availableSticky sessions cannot restore an unavailable exit IP
You genuinely need a constant IPUse static residential, not sticky sessions

An IP that should change doesn't

shell
# Each curl invocation is a new process and connection, so this rotates
for _ in 1 2 3; do
  curl -sS -x 'http://USER-country-US:PASS@GATEWAY_HOST:58971' https://api.ipify.org; echo
done

If curl rotates but your code doesn't, the connection is almost certainly being reused. Rotation needs two things:

  1. No session option
  2. A new connection

The second is the one people miss. Per-language approaches are in Sticky sessions and rotation.

Slow

First, identify which leg is slow

shell
curl -s -o /dev/null \
  -x 'http://USER-country-US:PASS@GATEWAY_HOST:58971' \
  -w 'dns=%{time_namelookup} connect=%{time_connect} tls=%{time_appconnect} ttfb=%{time_starttransfer} total=%{time_total}\n' \
  https://example.com
Slow fieldMeaningWhat to do
time_namelookupResolving the gateway hostname is slowYour local DNS; nothing to do with the proxy
time_connectThe leg between you and the gatewayTry a closer gateway node
time_appconnectTLS handshake (exit to target)Try another region, or the target itself is slow
time_starttransferThe target generating the responseThe target's problem

Throughput won't come up

Confirm fair-use isn't throttling you

At ≥85% gateway load, per-account concurrency tightens to 5,000, while under light load it can relax much higher. Load-test results don't represent peak capacity.

Confirm compression is on

shell
curl -H 'Accept-Encoding: gzip, deflate, br' ...

Skipping compression is both slower and 3–5× more expensive in traffic. See Traffic accounting.

Confirm you're reusing connections

Each new HTTPS connection carries 3–6 KB of TLS handshake plus one round trip. With dense request patterns, not reusing connections is expensive.

This conflicts with rotating IPs, so there's a trade-off. The compromise is reusing connections within a sticky session.

For high-volume workloads, change product line

Dynamic residential is billed per gigabyte and isn't designed for high bandwidth. Large files and video streams belong on unlimited residential.

Connections dropping mid-stream

SymptomCause
Drops at exactly 5 minutesIdle timeout. Moving data prevents it; long polling and SSE need heartbeats
Drops at exactly 24 hoursMaximum connection lifetime
Frequent ECONNRESETClient pool keepAlive exceeds the gateway's 5-minute idle timeout, handing out closed connections
Random dropsExit connection instability; with session, the original session exit may be unavailable

Detected or blocked by the target site

This class of problem isn't on the gateway side, but it comes up often enough to warrant a diagnostic path.

Confirm it isn't an IP attribution problem

Using datacenter proxies against sites sensitive to hosting IPs (e-commerce, social media, ticketing), buying more datacenter IPs won't help — mainstream anti-bot systems determine attribution type from the ASN.

That's an attribution problem, not a volume problem, and it needs dynamic residential or static residential.

Confirm fingerprint and region agree

An exit IP in the United States with a browser reporting Asia/Shanghai and zh-CN is a strong signal by itself.

When you specify country, align locale, timezone_id and geolocation. See Browsers and anti-detect browsers.

Confirm WebRTC isn't leaking

WebRTC can bypass an HTTP proxy and expose your real IP. And since this gateway doesn't support UDP, WebRTC media can't traverse it anyway — leaving it on "real" simply leaks.

It must be set to "replace with proxy IP" or "disable".

Confirm your behavioural pattern isn't anomalous

Fixed request intervals, a perfectly constant User-Agent, form submissions with no mouse movement — these are behavioural signals no amount of IP rotation compensates for.

Move account work to static IPs

Target sites read IP changes as a risk signal. Account warming and social media operations belong on static residential — a fixed IP for 30 days is far more reliable than a sticky session's 120-minute ceiling.

Still stuck

Open a ticket (POST /api/v1/support/tickets) with:

  • The complete curl -v output (credentials redacted)
  • The full username options you used (base username redacted)
  • The gateway node address and port
  • The exact status code or SOCKS5 reply code received
  • The time range of the failures, with timezone
  • The failure rate: 100% or intermittent
  • What you've already ruled out

Did this page solve your problem?