5xx Server Error

502 Bad Gateway

What it means

A proxy, load balancer, or CDN sitting in front of your server received an invalid, empty, or malformed response from the upstream server it contacted. The proxy itself is running fine — it's what the proxy is talking to that's broken. In Nginx → Node.js setups, you'll see this in Nginx when Node.js crashes or sends garbage.

Site Visitor

What can I do?

  • This is a server-side error. Wait a few minutes and try again. If it persists, contact the site owner.
Developer

How to debug & fix

  1. Check the application server logs first — 502 in Nginx usually means Node.js/Python is dead
  2. Monitor with health checks so you know before users do
  3. Increase proxy timeouts if legitimate requests are slow (proxy_read_timeout in Nginx)
  4. Ensure your app restarts automatically (PM2, systemd, Docker restart policies)
  5. Check application server logs first — 502 in Nginx almost always means the upstream (Node.js/Python/PHP) is down or returning bad headers.
  6. Configure automatic restarts: PM2, systemd, or Docker restart: unless-stopped.

Code Example

Node.js / Express
// Nginx config to handle slow apps:
// proxy_read_timeout 120s;
// proxy_connect_timeout 10s;

// PM2 to keep Node.js running:
// pm2 start app.js --name api
// pm2 startup && pm2 save

How HTTP Status Codes Work

Every HTTP response carries a three-digit status code that tells the client — browser, API consumer, or search-engine crawler — exactly what happened. The first digit defines the class: 1xx informational (request in progress), 2xx success, 3xx redirection, 4xx client error (bad request, missing auth, not found), and 5xx server failure.

Status codes are standardised in RFC 9110 (HTTP Semantics, 2022). Extensions like WebDAV (RFC 4918) and rate-limit headers (RFC 6585) added codes beyond the core set. When a client receives an unrecognised code, the rule is to treat it as the generic x00 of its class.

Why the Right Code Matters

Semantically correct codes help search engines index accurately (301 passes link equity; 410 removes pages faster than 404), allow API clients to implement correct retry logic (429 + Retry-After, 503 + Retry-After), and let monitoring systems distinguish bugs (500) from load issues (503) from auth failures (401/403).

Looking up a different status code? The full reference covers all HTTP codes with causes, fix guides, and copyable code examples for Node.js and Python.

Browse the full HTTP Status Code reference →

Frequently Asked Questions

What does HTTP 502 Bad Gateway mean?
A proxy, load balancer, or CDN sitting in front of your server received an invalid, empty, or malformed response from the upstream server it contacted. The proxy itself is running fine — it's what the proxy is talking to that's broken. In Nginx → Node.js setups, you'll see this in Nginx when Node.js crashes or sends garbage.
Is HTTP 502 the visitor's fault?
No. HTTP 502 Bad Gateway is a server-side error. The problem lies with the server, not the visitor. The site owner is responsible for fixing it.
How do I fix HTTP 502 Bad Gateway?
As a visitor: wait a few minutes and refresh — server errors are usually temporary. As a developer: check your server error logs immediately, restart the application server if needed, and set up uptime monitoring.