Legacy 8080 Health Checks Overriding Explicit Port 80

Despite explicit configuration for port 80 health checks and disable_implicit_checks=true, Fly.io’s infrastructure continues to enforce legacy 8080 health checks, causing false “critical” status and automatic machine stoppages.

Evidence of Configuration:

  1. fly.toml Configuration:
[http_service]
  disable_implicit_checks = true
  internal_port = 80

[[http_service.checks]]
  type = "http"
  port = 80
  path = "/health"
  interval = "10s"
  timeout = "2s"
  grace_period = "5s"
  1. Current Health Check Status:
$ fly checks list -a x-realestate
NAME                      | STATUS   | OUTPUT
servicecheck-00-http-8080 | critical | connect: connection refused

Diagnostic Evidence:

  1. Port Verification:
$ fly ssh console -a x-realestate -C "netstat -tuln"
Active Internet connections (only servers)
Proto  Local Address        Foreign Address      State
tcp    0.0.0.0:80          0.0.0.0:*            LISTEN
tcp6   :::80               :::*                 LISTEN
  1. Health Check Simulation:
# Port 80 succeeds:
$ curl -I http://localhost:80/health
HTTP/1.1 200 OK

# Port 8080 fails (as expected):
$ curl -I http://localhost:8080/health
curl: (7) Failed to connect to port 8080
  1. Deployment Logs Show Conflict:
2025-06-23T15:58:29Z proxy[...] waiting for machine on 0.0.0.0:8080
2025-06-23T15:58:32Z proxy[...] failed to connect to machine: gave up after 15 attempts

Steps Taken to Resolve:

  1. ✓ Confirmed NGINX only listens on port 80
  2. ✓ Verified disable_implicit_checks is properly set
  3. ✓ Multiple deployments with --force-manifest
  4. ✓ Complete machine restarts
  5. ✓ Attempted health check handoff procedures

Technical Environment:

  • Fly CLI v0.1.47
  • NGINX 1.27.5
  • App Region: ams
  • Machine Size: shared-cpu-1x

Request:
Please have Fly’s platform team:

  1. Manually clear legacy health check configurations for x-realestate
  2. Verify backend service registration respects explicit port 80 checks
  3. Confirm complete removal of implicit 8080 check behavior

Supporting Data:
Full logs and configuration available upon request. This behavior persists across multiple app restarts and deployments.

Hi… Overall, I’d suggest removing all keys and sections from fly.toml that aren’t explicitly documented in the following:

https://fly.io/docs/reference/configuration/

For example, http_service.checks doesn’t allow port or type fields, as far as I know.

Also, look for overlapping [http_service] and [[services]] sections (i.e., ones having the same internal_port or port), since those tend to confuse the Fly.io infrastructure.

If you still encounter problems, please do post the full, revised fly.toml.

Hope this helps a little!

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