This machine is a k3s worker node, k3s hijacked all 127.0.0.1 80 traffic by modifying iptables itself. After disabling k3s traefik, now it worked. I was trying to replace k3s traefik with host’s caddy cluster.
Why AI mislead: k3s is also written in golang, while ngnix / apache is not, and indeed no other service listen on 80. k3s just modified the iptables.
So, truth found. It’s not caddy’s issue. The request didn’t reach caddy.
If someone else got similar case, they may check iptables and confirm is this machine part of k3s/k8s cluster with traefik enabled.
(I created this just to inform the truth, since the github post was locked.)