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:
- 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"
- Current Health Check Status:
$ fly checks list -a x-realestate
NAME | STATUS | OUTPUT
servicecheck-00-http-8080 | critical | connect: connection refused
Diagnostic Evidence:
- 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
- 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
- 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:
- ✓ Confirmed NGINX only listens on port 80
- ✓ Verified
disable_implicit_checks
is properly set - ✓ Multiple deployments with
--force-manifest
- ✓ Complete machine restarts
- ✓ 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:
- Manually clear legacy health check configurations for x-realestate
- Verify backend service registration respects explicit port 80 checks
- 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.