Fly-managed Upstash Redis: TCP connects then ECONNRESET, proxy returns no data

I’m using Fly-managed Redis (Upstash) for my app in region iad. The Redis proxy repeatedly accepts TCP connections and then resets them without sending any data. This has happened on two different Fly Redis databases (after destroying and recreating the first).

What I see

  • App connects to the private URL (redis://default:***@fly-<dbname>.upstash.io:6379).

  • TCP connect succeeds, then the connection is reset after a short time (~75ms–2s).

  • No Redis protocol data is received before the reset.

  • ioredis retries continuously (e.g. Retry #7756) and logs ECONNRESET.

Example logs (app):

[Redis] TCP connected (socket established)

[Redis] Connection error: read ECONNRESET

[Redis]   code: ECONNRESET

[Redis]   syscall: read

[Redis] Connection closed

[Redis] Reconnecting in 2000ms...

[Redis] Retry #7756, next attempt in 2000ms

(repeats every ~2 seconds)

Raw TCP test from inside the Fly machine (SSH console):

fly ssh console -a <app-name> -C "node -e \"const c=require('net').connect(6379,'fly-<dbname>.upstash.io',()=>{console.log('tcp connected');c.write('AUTH default <password>\r\nPING\r\n')});c.on('data',d=>console.log('recv:',d.toString()));c.on('error',e=>console.log('error:',e.message));c.on('close',()=>{console.log('closed');process.exit()});setTimeout(()=>process.exit(),5000)\""

Result: tcp connected → then error: read ECONNRESET and closed. No recv: output — the server sends nothing before closing.

Other checks

  • DNS from the app machine: hostname resolves only to IPv6 fdaa:37:15d5:0:1::2 (ENODATA for IPv4). Connection is made over that address.

  • Credentials re-set via Fly secrets; same behavior.

  • rediss:// (TLS) to the same host: connection times out (ETIMEDOUT), so TLS is not supported on this endpoint.

  • Upstash dashboard shows the DB healthy; TLS disabled for this endpoint.

So the Fly internal proxy for this Redis instance appears to accept TCP and then reset without ever returning Redis protocol. Destroying and recreating the Fly Redis DB fixed it temporarily; the same failure reappeared on the new DB after some time.

Is this a known issue with the Fly ↔ Upstash proxy, and is there a recommended fix or workaround (e.g. different region, plan, or endpoint)?

I’ve ditched Fly.io managed redis and just used my own Upstash redis db instance directly and my API is back up and running again. I’m not sure what the deal is with the proxy service, but it’s not working.

This topic was automatically closed 7 days after the last reply. New replies are no longer allowed.