Incident Library

IL-0356 Railway · 2026-09-30networking

Every domain hosted on Railway returned HTTP 404 to new connections for five minutes because route lookups failed

Railway's distributed routing control plane tells its origin proxies where to send requests for each domain. It had recently been split out of a monolith so that it would keep running through a major cloud outage, and it runs in many places with rollout pipelines that run in parallel. A new authentication layer that lets customers put a login in front of their services needed a changed data type in the database table that stores routing data and a new routing service version that reads the new format. The schema update runs as a migration job in one system and the routing service is built and deployed by another. In the monolith a single pipeline had enforced the order; after the split, a configuration error let the migration and the deployment run in parallel, a race that shows most with larger migrations.

On 30 September 2026 the routing service build won the race. As it rolled out in every region it queried columns that did not exist yet, and every route lookup returned an error. The change also touched the domain fallback behaviour, so the origin proxies could not fall back to the last known route and returned 404 for every new connection to every domain, and private network DNS lookups failed too. At about 07:40 the CI system finished the schema update, the routing service's retried lookups returned 200, and domains routed normally again. Engineers found the cause at 07:44, confirmed full recovery at 07:47 without a rollback, posted a public incident at 07:48 and marked it resolved at 08:17. Railway states that no data was lost.

Severity
–
Scope
New connections to all domains hosted on Railway, custom and *.up.railway.app, returned HTTP 404; public access and some private networking lookups between services failed; existing connections and running workloads were not affected
Users affected
all customers
Region
all regions
Time to detect
0m
Time to resolve
5m

Symptoms

On 30 September 2026, between about 07:35 and 07:40 UTC, new connections to every domain hosted on Railway, both custom domains and *.up.railway.app domains, got HTTP 404 in all regions. Internal alerting paged the on-call team as soon as route lookups started to fail.

The 404 came from Railway's origin proxies. For each request, an origin proxy asks the routing service which workloads serve the domain. The routing service's lookups were failing, and the origin proxies answered a failed lookup the same way as a domain with no routes, with a 404, instead of using the last route they had seen for the domain. Private networking lookups between services also failed in the same window, because the same routing service resolves private network DNS.

Connections that were already open kept working, and the workloads behind the domains kept running; only new visits failed. Routing came back on its own about five minutes later, when the routing service's retried lookups started to succeed, and engineers confirmed full recovery at 07:47 without a rollback.

Symptom Service outageDNS resolution failures

Root cause

Trigger
At 07:29 UTC an engineer merged a change to the routing control plane that contained a database schema update and a new version of the routing service. At about 07:35 the deployment system rolled the new routing service out to every region before the schema update had been applied.

Detection

Internal alerting engaged the on-call response team as soon as route lookups began to fail at about 07:35 UTC.

Remediation

Action items

Lessons

–

Sources

Related cases

Check your cluster for this

kubegap audits a Kubernetes cluster for conditions like the ones in this case, Network control plane (SDN), Database, CI system among them, read-only, from Claude Code or Codex. Its checks cite public reports like this one.

For AI tools and scripts

The API needs no key. The MCP server offers search_incidents, get_incident, list_incidents, get_topic and vocab; both are explained on API and MCP.