Skip to content

Random host values showing up in Prometheus metrics #7055

@gucci-on-fleek

Description

@gucci-on-fleek

I've enabled (per-host) Prometheus metrics for the first time last week, but I'm noticing that most days, I'm seeing a few requests for exactly 1 host that I don't control. When I restart Caddy, this disappears, but then sometime later, a different random host shows up.

Below are the results of running the query max_over_time(caddy_http_requests_total[2w]); I've bolded the domains that don't belong to me:

Prometheus query results
Time handler host instance job server Value
2025-06-08 23:25:20.087 static_response 2a0a:4cc0:2000:172::1 10.79.79.2:9117 caddy srv1 1
2025-06-08 23:25:20.087 static_response google.com:443 10.79.79.2:9117 caddy srv1 1
2025-06-08 23:25:20.087 static_response httpbin.org:443 10.79.79.2:9117 caddy srv1 1
2025-06-08 23:25:20.087 static_response m.naver.com:443 10.79.79.2:9117 caddy srv1 1
2025-06-08 23:25:20.087 subroute 2a0a:4cc0:2000:172::1 10.79.79.2:9117 caddy srv2 1
2025-06-08 23:25:20.087 static_response 127.0.0.1:80 10.79.79.2:9117 caddy srv1 2
2025-06-08 23:25:20.087 static_response patrickmm44tngdyixczq4gvccy2kjyignpfwjx6ryovvf6svopezeyd.onion 10.79.79.2:9117 caddy srv1 2
2025-06-08 23:25:20.087 subroute overleaf.maxchernoff.ca:443 10.79.79.2:9117 caddy srv2 2
2025-06-08 23:25:20.087 subroute ech.maxchernoff.ca:443 10.79.79.2:9117 caddy srv2 3
2025-06-08 23:25:20.087 subroute mta-sts.duck.tel 10.79.79.2:9117 caddy srv2 3
2025-06-08 23:25:20.087 static_response ech.maxchernoff.ca:80 10.79.79.2:9117 caddy srv1 4
2025-06-08 23:25:20.087 subroute ech.maxchernoff.ca 10.79.79.2:9117 caddy srv2 9
2025-06-08 23:25:20.087 subroute mta-sts.maxchernoff.ca 10.79.79.2:9117 caddy srv2 11
2025-06-08 23:25:20.087 static_response api.maxchernoff.ca 10.79.79.2:9117 caddy srv1 12
2025-06-08 23:25:20.087 subroute ns.maxchernoff.ca 10.79.79.2:9117 caddy srv2 12
2025-06-08 23:25:20.087 static_response icanhazip.com:443 10.79.79.2:9117 caddy srv1 13
2025-06-08 23:25:20.087 subroute api.maxchernoff.ca 10.79.79.2:9117 caddy srv2 16
2025-06-08 23:25:20.087 static_response [2a0a:4cc0:2000:172::1] 10.79.79.2:9117 caddy srv1 19
2025-06-08 23:25:20.087 static_response www.maxchernoff.ca 10.79.79.2:9117 caddy srv1 22
2025-06-08 23:25:20.087 subroute [2a0a:4cc0:2000:172::1] 10.79.79.2:9117 caddy srv2 26
2025-06-08 23:25:20.087 static_response noreply.maxchernoff.ca 10.79.79.2:9117 caddy srv1 27
2025-06-08 23:25:20.087 static_response overleaf.maxchernoff.ca 10.79.79.2:9117 caddy srv1 29
2025-06-08 23:25:20.087 subroute duck.tel 10.79.79.2:9117 caddy srv2 29
2025-06-08 23:25:20.087 subroute noreply.maxchernoff.ca 10.79.79.2:9117 caddy srv2 29
2025-06-08 23:25:20.087 static_response mta-sts.duck.tel 10.79.79.2:9117 caddy srv1 31
2025-06-08 23:25:20.087 static_response prometheus.maxchernoff.ca 10.79.79.2:9117 caddy srv1 31
2025-06-08 23:25:20.087 static_response registry.maxchernoff.ca 10.79.79.2:9117 caddy srv1 31
2025-06-08 23:25:20.087 static_response grafana.maxchernoff.ca 10.79.79.2:9117 caddy srv1 33
2025-06-08 23:25:20.087 static_response ns.maxchernoff.ca 10.79.79.2:9117 caddy srv1 33
2025-06-08 23:25:20.087 static_response maxchernoff.ca 10.79.79.2:9117 caddy srv1 37
2025-06-08 23:25:20.087 static_response woodpecker.maxchernoff.ca 10.79.79.2:9117 caddy srv1 39
2025-06-08 23:25:20.087 subroute stardew-valley-item-finder.maxchernoff.ca 10.79.79.2:9117 caddy srv2 43
2025-06-08 23:25:20.087 static_response duck.tel 10.79.79.2:9117 caddy srv1 44
2025-06-08 23:25:20.087 static_response ech.maxchernoff.ca 10.79.79.2:9117 caddy srv1 47
2025-06-08 23:25:20.087 static_response stardew-valley-item-finder.maxchernoff.ca 10.79.79.2:9117 caddy srv1 55
2025-06-08 23:25:20.087 subroute 152.53.36.213:443 10.79.79.2:9117 caddy srv2 55
2025-06-08 23:25:20.087 static_response 152.53.36.213:80 10.79.79.2:9117 caddy srv1 72
2025-06-08 23:25:20.087 subroute registry.maxchernoff.ca 10.79.79.2:9117 caddy srv2 75
2025-06-08 23:25:20.087 static_response mta-sts.maxchernoff.ca 10.79.79.2:9117 caddy srv1 96
2025-06-08 23:25:20.087 subroute maxchernoff.ca 10.79.79.2:9117 caddy srv2 102
2025-06-08 23:25:20.087 subroute prometheus.maxchernoff.ca 10.79.79.2:9117 caddy srv2 133
2025-06-08 23:25:20.087 static_response 152.53.36.213 10.79.79.2:9117 caddy srv1 159
2025-06-08 23:25:20.087 subroute 152.53.36.213 10.79.79.2:9117 caddy srv2 164
2025-06-08 23:25:20.087 subroute overleaf.maxchernoff.ca 10.79.79.2:9117 caddy srv2 194
2025-06-08 23:25:20.087 subroute woodpecker.maxchernoff.ca 10.79.79.2:9117 caddy srv2 270
2025-06-08 23:25:20.087 static_response 10.79.79.2:9117 caddy srv1 411
2025-06-08 23:25:20.087 subroute www.maxchernoff.ca 10.79.79.2:9117 caddy srv2 535
2025-06-08 23:25:20.087 subroute 10.79.79.2:9117 caddy srv0 2862
2025-06-08 23:25:20.087 subroute 10.79.79.2:9117 10.79.79.2:9117 caddy srv0 2873
2025-06-08 23:25:20.087 subroute grafana.maxchernoff.ca 10.79.79.2:9117 caddy srv2 4767
2025-06-08 23:25:20.087 subroute 10.79.79.2:9117 caddy srv2 10155

Searching the logs doesn't show anything relevant:

Logs
$ journalctl --boot=all --lines=all --since=2025-05-31 --no-pager --grep='httpbin.org|google.com|m.naver.com|patrickmm44tngdyixczq4gvccy2kjyignpfwjx6ryovvf6svopezeyd.onion|icanhazip.com' --user-unit=caddy.service
-- Boot 20a5c0181da24fc8866712d5432500e8 --
-- Boot 4d28c37f806449b8a67fc91b621bfd95 --
Jun 01 21:13:34 maxchernoff.ca systemd-caddy[158512]: 2025/06/02 03:13:34.046        WARN        http.handlers.reverse_proxy        aborting with incomplete response        {"upstream": "systemd-woodpecker-server:8000", "duration": 0.000558981, "request": {"remote_ip": "66.249.79.224", "remote_port": "63461", "client_ip": "66.249.79.224", "proto": "HTTP/1.1", "method": "GET", "host": "woodpecker.maxchernoff.ca", "uri": "/api/stream/events", "headers": {"Cache-Control": ["no-cache"], "User-Agent": ["Mozilla/5.0 (Linux; Android 6.0.1; Nexus 5X Build/MMB29P) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.7103.92 Mobile Safari/537.36 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)"], "X-Forwarded-Host": ["woodpecker.maxchernoff.ca"], "Via": ["1.1 Caddy"], "Accept-Encoding": ["gzip, deflate, br"], "Accept-Language": ["en-US"], "Accept": ["text/event-stream"], "From": ["googlebot(at)googlebot.com"], "Referer": ["https://woodpecker.maxchernoff.ca/login"], "X-Forwarded-For": ["66.249.79.224"], "X-Forwarded-Proto": ["https"]}, "tls": {"resumed": false, "version": 772, "cipher_suite": 4865, "proto": "", "server_name": "woodpecker.maxchernoff.ca"}}, "error": "reading: context canceled"}
Jun 01 21:13:46 maxchernoff.ca systemd-caddy[158512]: 2025/06/02 03:13:46.080        WARN        http.handlers.reverse_proxy        aborting with incomplete response        {"upstream": "systemd-woodpecker-server:8000", "duration": 0.001648905, "request": {"remote_ip": "66.249.79.224", "remote_port": "39924", "client_ip": "66.249.79.224", "proto": "HTTP/1.1", "method": "GET", "host": "woodpecker.maxchernoff.ca", "uri": "/api/stream/events", "headers": {"User-Agent": ["Mozilla/5.0 (Linux; Android 6.0.1; Nexus 5X Build/MMB29P) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.7103.92 Mobile Safari/537.36 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)"], "Accept-Language": ["en-US"], "Accept": ["text/event-stream"], "From": ["googlebot(at)googlebot.com"], "Accept-Encoding": ["gzip, deflate, br"], "X-Forwarded-Proto": ["https"], "X-Forwarded-Host": ["woodpecker.maxchernoff.ca"], "Via": ["1.1 Caddy"], "Cache-Control": ["no-cache"], "Referer": ["https://woodpecker.maxchernoff.ca/login"], "X-Forwarded-For": ["66.249.79.224"]}, "tls": {"resumed": false, "version": 772, "cipher_suite": 4865, "proto": "", "server_name": "woodpecker.maxchernoff.ca"}}, "error": "reading: context canceled"}
-- Boot 26980d5ab3d84c6eb50c880f57159c45 --
-- Boot c78c906412334e4a8978f92133ecae3e --
-- Boot 417d1b50262e48e4add5dea357ae6913 --
-- Boot 99f90d52c26f46779041287c5310d07b --
-- Boot c7e9963ec48e4b3d9f5f826085872c40 --
-- Boot 93da27c6d020424ab1a7c5f1e2613dae --
-- Boot 96060bbfbda440ef9879813b30ec7fe9 --
-- Boot 0c986b74387449e39050aebdedb84592 --
-- Boot 2685a24fe1fb40fc9aae0f51254687a7 --
-- Boot 0bbf4267a35f4386a6507173e2ebcf6f --

$ grep -ERn 'httpbin.org|m.naver.com|patrickmm44tngdyixczq4gvccy2kjyignpfwjx6ryovvf6svopezeyd.onion|icanhazip.com' ~web/caddy/logs/  # "google.com" left out here to exclude hundreds of Googlebot hits
$ echo $?
1

I'm using Caddy 2.10 with a few different modules installed:

Caddy and module versions
$ caddy version
v2.10.0 h1:fonubSaQKF1YANl8TXqGcn4IbIRUDdfAkpcsfI/vX5U=

$ caddy list-modules --packages --versions
admin.api.load v2.10.0 github.com/caddyserver/caddy/v2
admin.api.metrics v2.10.0 github.com/caddyserver/caddy/v2
admin.api.pki v2.10.0 github.com/caddyserver/caddy/v2
admin.api.reverse_proxy v2.10.0 github.com/caddyserver/caddy/v2
caddy.adapters.caddyfile v2.10.0 github.com/caddyserver/caddy/v2
caddy.config_loaders.http v2.10.0 github.com/caddyserver/caddy/v2
caddy.filesystems v2.10.0 github.com/caddyserver/caddy/v2
caddy.listeners.http_redirect v2.10.0 github.com/caddyserver/caddy/v2
caddy.listeners.proxy_protocol v2.10.0 github.com/caddyserver/caddy/v2
caddy.listeners.tls v2.10.0 github.com/caddyserver/caddy/v2
caddy.logging.cores.mock v2.10.0 github.com/caddyserver/caddy/v2
caddy.logging.encoders.append v2.10.0 github.com/caddyserver/caddy/v2
caddy.logging.encoders.console v2.10.0 github.com/caddyserver/caddy/v2
caddy.logging.encoders.filter v2.10.0 github.com/caddyserver/caddy/v2
caddy.logging.encoders.filter.cookie v2.10.0 github.com/caddyserver/caddy/v2
caddy.logging.encoders.filter.delete v2.10.0 github.com/caddyserver/caddy/v2
caddy.logging.encoders.filter.hash v2.10.0 github.com/caddyserver/caddy/v2
caddy.logging.encoders.filter.ip_mask v2.10.0 github.com/caddyserver/caddy/v2
caddy.logging.encoders.filter.query v2.10.0 github.com/caddyserver/caddy/v2
caddy.logging.encoders.filter.regexp v2.10.0 github.com/caddyserver/caddy/v2
caddy.logging.encoders.filter.rename v2.10.0 github.com/caddyserver/caddy/v2
caddy.logging.encoders.filter.replace v2.10.0 github.com/caddyserver/caddy/v2
caddy.logging.encoders.json v2.10.0 github.com/caddyserver/caddy/v2
caddy.logging.writers.discard v2.10.0 github.com/caddyserver/caddy/v2
caddy.logging.writers.file v2.10.0 github.com/caddyserver/caddy/v2
caddy.logging.writers.net v2.10.0 github.com/caddyserver/caddy/v2
caddy.logging.writers.stderr v2.10.0 github.com/caddyserver/caddy/v2
caddy.logging.writers.stdout v2.10.0 github.com/caddyserver/caddy/v2
caddy.network_proxy.none v2.10.0 github.com/caddyserver/caddy/v2
caddy.network_proxy.url v2.10.0 github.com/caddyserver/caddy/v2
caddy.storage.file_system v2.10.0 github.com/caddyserver/caddy/v2
events v2.10.0 github.com/caddyserver/caddy/v2
http v2.10.0 github.com/caddyserver/caddy/v2
http.authentication.hashes.bcrypt v2.10.0 github.com/caddyserver/caddy/v2
http.authentication.providers.http_basic v2.10.0 github.com/caddyserver/caddy/v2
http.encoders.gzip v2.10.0 github.com/caddyserver/caddy/v2
http.encoders.zstd v2.10.0 github.com/caddyserver/caddy/v2
http.handlers.acme_server v2.10.0 github.com/caddyserver/caddy/v2
http.handlers.authentication v2.10.0 github.com/caddyserver/caddy/v2
http.handlers.copy_response v2.10.0 github.com/caddyserver/caddy/v2
http.handlers.copy_response_headers v2.10.0 github.com/caddyserver/caddy/v2
http.handlers.encode v2.10.0 github.com/caddyserver/caddy/v2
http.handlers.error v2.10.0 github.com/caddyserver/caddy/v2
http.handlers.file_server v2.10.0 github.com/caddyserver/caddy/v2
http.handlers.headers v2.10.0 github.com/caddyserver/caddy/v2
http.handlers.intercept v2.10.0 github.com/caddyserver/caddy/v2
http.handlers.invoke v2.10.0 github.com/caddyserver/caddy/v2
http.handlers.log_append v2.10.0 github.com/caddyserver/caddy/v2
http.handlers.map v2.10.0 github.com/caddyserver/caddy/v2
http.handlers.metrics v2.10.0 github.com/caddyserver/caddy/v2
http.handlers.push v2.10.0 github.com/caddyserver/caddy/v2
http.handlers.request_body v2.10.0 github.com/caddyserver/caddy/v2
http.handlers.reverse_proxy v2.10.0 github.com/caddyserver/caddy/v2
http.handlers.rewrite v2.10.0 github.com/caddyserver/caddy/v2
http.handlers.static_response v2.10.0 github.com/caddyserver/caddy/v2
http.handlers.subroute v2.10.0 github.com/caddyserver/caddy/v2
http.handlers.templates v2.10.0 github.com/caddyserver/caddy/v2
http.handlers.tracing v2.10.0 github.com/caddyserver/caddy/v2
http.handlers.vars v2.10.0 github.com/caddyserver/caddy/v2
http.ip_sources.static v2.10.0 github.com/caddyserver/caddy/v2
http.matchers.client_ip v2.10.0 github.com/caddyserver/caddy/v2
http.matchers.expression v2.10.0 github.com/caddyserver/caddy/v2
http.matchers.file v2.10.0 github.com/caddyserver/caddy/v2
http.matchers.header v2.10.0 github.com/caddyserver/caddy/v2
http.matchers.header_regexp v2.10.0 github.com/caddyserver/caddy/v2
http.matchers.host v2.10.0 github.com/caddyserver/caddy/v2
http.matchers.method v2.10.0 github.com/caddyserver/caddy/v2
http.matchers.not v2.10.0 github.com/caddyserver/caddy/v2
http.matchers.path v2.10.0 github.com/caddyserver/caddy/v2
http.matchers.path_regexp v2.10.0 github.com/caddyserver/caddy/v2
http.matchers.protocol v2.10.0 github.com/caddyserver/caddy/v2
http.matchers.query v2.10.0 github.com/caddyserver/caddy/v2
http.matchers.remote_ip v2.10.0 github.com/caddyserver/caddy/v2
http.matchers.tls v2.10.0 github.com/caddyserver/caddy/v2
http.matchers.vars v2.10.0 github.com/caddyserver/caddy/v2
http.matchers.vars_regexp v2.10.0 github.com/caddyserver/caddy/v2
http.precompressed.br v2.10.0 github.com/caddyserver/caddy/v2
http.precompressed.gzip v2.10.0 github.com/caddyserver/caddy/v2
http.precompressed.zstd v2.10.0 github.com/caddyserver/caddy/v2
http.reverse_proxy.selection_policies.client_ip_hash v2.10.0 github.com/caddyserver/caddy/v2
http.reverse_proxy.selection_policies.cookie v2.10.0 github.com/caddyserver/caddy/v2
http.reverse_proxy.selection_policies.first v2.10.0 github.com/caddyserver/caddy/v2
http.reverse_proxy.selection_policies.header v2.10.0 github.com/caddyserver/caddy/v2
http.reverse_proxy.selection_policies.ip_hash v2.10.0 github.com/caddyserver/caddy/v2
http.reverse_proxy.selection_policies.least_conn v2.10.0 github.com/caddyserver/caddy/v2
http.reverse_proxy.selection_policies.query v2.10.0 github.com/caddyserver/caddy/v2
http.reverse_proxy.selection_policies.random v2.10.0 github.com/caddyserver/caddy/v2
http.reverse_proxy.selection_policies.random_choose v2.10.0 github.com/caddyserver/caddy/v2
http.reverse_proxy.selection_policies.round_robin v2.10.0 github.com/caddyserver/caddy/v2
http.reverse_proxy.selection_policies.uri_hash v2.10.0 github.com/caddyserver/caddy/v2
http.reverse_proxy.selection_policies.weighted_round_robin v2.10.0 github.com/caddyserver/caddy/v2
http.reverse_proxy.transport.fastcgi v2.10.0 github.com/caddyserver/caddy/v2
http.reverse_proxy.transport.http v2.10.0 github.com/caddyserver/caddy/v2
http.reverse_proxy.upstreams.a v2.10.0 github.com/caddyserver/caddy/v2
http.reverse_proxy.upstreams.multi v2.10.0 github.com/caddyserver/caddy/v2
http.reverse_proxy.upstreams.srv v2.10.0 github.com/caddyserver/caddy/v2
pki v2.10.0 github.com/caddyserver/caddy/v2
tls v2.10.0 github.com/caddyserver/caddy/v2
tls.ca_pool.source.file v2.10.0 github.com/caddyserver/caddy/v2
tls.ca_pool.source.http v2.10.0 github.com/caddyserver/caddy/v2
tls.ca_pool.source.inline v2.10.0 github.com/caddyserver/caddy/v2
tls.ca_pool.source.pki_intermediate v2.10.0 github.com/caddyserver/caddy/v2
tls.ca_pool.source.pki_root v2.10.0 github.com/caddyserver/caddy/v2
tls.ca_pool.source.storage v2.10.0 github.com/caddyserver/caddy/v2
tls.certificates.automate v2.10.0 github.com/caddyserver/caddy/v2
tls.certificates.load_files v2.10.0 github.com/caddyserver/caddy/v2
tls.certificates.load_folders v2.10.0 github.com/caddyserver/caddy/v2
tls.certificates.load_pem v2.10.0 github.com/caddyserver/caddy/v2
tls.certificates.load_storage v2.10.0 github.com/caddyserver/caddy/v2
tls.client_auth.verifier.leaf v2.10.0 github.com/caddyserver/caddy/v2
tls.ech.publishers.dns v2.10.0 github.com/caddyserver/caddy/v2
tls.get_certificate.http v2.10.0 github.com/caddyserver/caddy/v2
tls.get_certificate.tailscale v2.10.0 github.com/caddyserver/caddy/v2
tls.handshake_match.local_ip v2.10.0 github.com/caddyserver/caddy/v2
tls.handshake_match.remote_ip v2.10.0 github.com/caddyserver/caddy/v2
tls.handshake_match.sni v2.10.0 github.com/caddyserver/caddy/v2
tls.handshake_match.sni_regexp v2.10.0 github.com/caddyserver/caddy/v2
tls.issuance.acme v2.10.0 github.com/caddyserver/caddy/v2
tls.issuance.internal v2.10.0 github.com/caddyserver/caddy/v2
tls.issuance.zerossl v2.10.0 github.com/caddyserver/caddy/v2
tls.leaf_cert_loader.file v2.10.0 github.com/caddyserver/caddy/v2
tls.leaf_cert_loader.folder v2.10.0 github.com/caddyserver/caddy/v2
tls.leaf_cert_loader.pem v2.10.0 github.com/caddyserver/caddy/v2
tls.leaf_cert_loader.storage v2.10.0 github.com/caddyserver/caddy/v2
tls.permission.http v2.10.0 github.com/caddyserver/caddy/v2
tls.stek.distributed v2.10.0 github.com/caddyserver/caddy/v2
tls.stek.standard v2.10.0 github.com/caddyserver/caddy/v2

  Standard modules: 127

cache v0.15.0 github.com/caddyserver/cache-handler
caddy.listeners.layer4 v0.0.0-20250530154005-4d3c80e89c5f github.com/mholt/caddy-l4
caddy.logging.encoders.formatted v0.0.0-20250416233754-15eef9743261 github.com/caddyserver/transform-encoder
caddy.logging.encoders.transform v0.0.0-20250416233754-15eef9743261 github.com/caddyserver/transform-encoder
dns.providers.rfc2136 v1.0.0 github.com/caddy-dns/rfc2136
http.handlers.cache v0.15.0 github.com/caddyserver/cache-handler
http.handlers.rate_limit v0.1.0 github.com/mholt/caddy-ratelimit
http.handlers.replace_response v0.0.0-20241211194404-3865845790a7 github.com/caddyserver/replace-response
http.matchers.maxmind_geolocation v1.0.1 github.com/porech/caddy-maxmind-geolocation
layer4 v0.0.0-20250530154005-4d3c80e89c5f github.com/mholt/caddy-l4
layer4.handlers.echo v0.0.0-20250530154005-4d3c80e89c5f github.com/mholt/caddy-l4
layer4.handlers.proxy v0.0.0-20250530154005-4d3c80e89c5f github.com/mholt/caddy-l4
layer4.handlers.proxy_protocol v0.0.0-20250530154005-4d3c80e89c5f github.com/mholt/caddy-l4
layer4.handlers.socks5 v0.0.0-20250530154005-4d3c80e89c5f github.com/mholt/caddy-l4
layer4.handlers.subroute v0.0.0-20250530154005-4d3c80e89c5f github.com/mholt/caddy-l4
layer4.handlers.tee v0.0.0-20250530154005-4d3c80e89c5f github.com/mholt/caddy-l4
layer4.handlers.throttle v0.0.0-20250530154005-4d3c80e89c5f github.com/mholt/caddy-l4
layer4.handlers.tls v0.0.0-20250530154005-4d3c80e89c5f github.com/mholt/caddy-l4
layer4.matchers.clock v0.0.0-20250530154005-4d3c80e89c5f github.com/mholt/caddy-l4
layer4.matchers.dns v0.0.0-20250530154005-4d3c80e89c5f github.com/mholt/caddy-l4
layer4.matchers.http v0.0.0-20250530154005-4d3c80e89c5f github.com/mholt/caddy-l4
layer4.matchers.local_ip v0.0.0-20250530154005-4d3c80e89c5f github.com/mholt/caddy-l4
layer4.matchers.not v0.0.0-20250530154005-4d3c80e89c5f github.com/mholt/caddy-l4
layer4.matchers.openvpn v0.0.0-20250530154005-4d3c80e89c5f github.com/mholt/caddy-l4
layer4.matchers.postgres v0.0.0-20250530154005-4d3c80e89c5f github.com/mholt/caddy-l4
layer4.matchers.proxy_protocol v0.0.0-20250530154005-4d3c80e89c5f github.com/mholt/caddy-l4
layer4.matchers.quic v0.0.0-20250530154005-4d3c80e89c5f github.com/mholt/caddy-l4
layer4.matchers.rdp v0.0.0-20250530154005-4d3c80e89c5f github.com/mholt/caddy-l4
layer4.matchers.regexp v0.0.0-20250530154005-4d3c80e89c5f github.com/mholt/caddy-l4
layer4.matchers.remote_ip v0.0.0-20250530154005-4d3c80e89c5f github.com/mholt/caddy-l4
layer4.matchers.remote_ip_list v0.0.0-20250530154005-4d3c80e89c5f github.com/mholt/caddy-l4
layer4.matchers.socks4 v0.0.0-20250530154005-4d3c80e89c5f github.com/mholt/caddy-l4
layer4.matchers.socks5 v0.0.0-20250530154005-4d3c80e89c5f github.com/mholt/caddy-l4
layer4.matchers.ssh v0.0.0-20250530154005-4d3c80e89c5f github.com/mholt/caddy-l4
layer4.matchers.tls v0.0.0-20250530154005-4d3c80e89c5f github.com/mholt/caddy-l4
layer4.matchers.winbox v0.0.0-20250530154005-4d3c80e89c5f github.com/mholt/caddy-l4
layer4.matchers.wireguard v0.0.0-20250530154005-4d3c80e89c5f github.com/mholt/caddy-l4
layer4.matchers.xmpp v0.0.0-20250530154005-4d3c80e89c5f github.com/mholt/caddy-l4
layer4.proxy.selection_policies.first v0.0.0-20250530154005-4d3c80e89c5f github.com/mholt/caddy-l4
layer4.proxy.selection_policies.ip_hash v0.0.0-20250530154005-4d3c80e89c5f github.com/mholt/caddy-l4
layer4.proxy.selection_policies.least_conn v0.0.0-20250530154005-4d3c80e89c5f github.com/mholt/caddy-l4
layer4.proxy.selection_policies.random v0.0.0-20250530154005-4d3c80e89c5f github.com/mholt/caddy-l4
layer4.proxy.selection_policies.random_choose v0.0.0-20250530154005-4d3c80e89c5f github.com/mholt/caddy-l4
layer4.proxy.selection_policies.round_robin v0.0.0-20250530154005-4d3c80e89c5f github.com/mholt/caddy-l4
storages.cache.otter v0.0.15 github.com/darkweak/storages/otter/caddy
tls.handshake_match.alpn v0.0.0-20250530154005-4d3c80e89c5f github.com/mholt/caddy-l4

  Non-standard modules: 46

  Unknown modules: 0

I don't have a minimal reproducer for this (sorry!), but here is my complete Caddyfile:

Contents of my Caddyfiles
# Define the minifier
(minify) {
	# JavaScript/JSON
	replace {
		match {
			header Content-Type "text/javascript*"
			header Content-Type "application/json*"
			header Content-Type "*+json*"
		}
		re `^//.*\n|/\s*\*[^\0]*?\*\/\s*|\s*(\n)\s*|\s+([^-\w])` "${1}${2}"
	}

	# CSS
	replace {
		match {
			header Content-Type "text/css*"
		}
		re `/\*[^\0]*?\*\/|\s*\n\s*|([^-\w)])\s+` "${1}"
	}

	# XML
	replace {
		match {
			header Content-Type "text/xml*"
			header Content-Type "application/xml*"
			header Content-Type "*+xml*"
			header !X-No-Minify
		}
		re `<![-]-[^\0]*?[-]->\s*|\s*(\n)\s*|([^-\w<!])\s+([^-\w<!])` "${1}${2}${3}"
	}
}

# Define the default options for all sites
(default-base) {
	# Compress responses
	encode zstd gzip

	header {
		# Security headers
		X-Content-Type-Options nosniff
		?Cross-Origin-Resource-Policy same-origin
		?Content-Security-Policy "default-src 'none'; frame-ancestors 'none'; form-action 'none'; style-src 'self' 'unsafe-inline'; img-src 'self' https: data:; script-src 'self'; script-src-elem 'self';"

		# Prerendering
		Supports-Loading-Mode credentialed-prerender uncredentialed-prerender
	}

	# Use www.maxchernoff.ca for special URLs
	@rewrite-special {
		path /.well-known/* /ads.txt /app-ads.txt /apple-touch-icon*.png /favicon.ico /favicon.svg /robots.txt /touch-icon*.png /sellers.json
	}
	handle @rewrite-special {
		# Serve the files
		root * /srv
		file_server

		# Minify
		import minify

		# Caching
		header Cache-Control max-age=1209600 # 2 weeks
		cache

		# Set the correct Content-Types
		header /.well-known/traffic-advice {
			Content-Type application/trafficadvice+json
		}

		header /.well-known/dnt {
			Content-Type application/tracking-status+json
		}

		header /.well-known/host-meta {
			Content-Type /application/xrd+xml
		}

		# `time` URL
		handle /.well-known/time {
			header Content-Type text/plain
			templates mime text/plain
			header Cache-Control no-cache
		}

		# Clean up some root-level URLs
		rewrite /ads.txt /.well-known/ads.txt
		rewrite /app-ads.txt /.well-known/app-ads.txt
		rewrite /robots.txt /.well-known/robots.txt
		rewrite /sellers.json /.well-known/sellers.json

		rewrite /apple-touch-icon*.png /assets/apple-touch-icon.png
		rewrite /favicon.ico /assets/favicon.ico
		rewrite /favicon.svg /assets/favicon.svg
		rewrite /touch-icon*.png /assets/apple-touch-icon.png
	}

	header /assets/* {
		Cache-Control max-age=86400 # 1 day
	}

	# Allow access to the icons and CSS from other sites
	@cross-origin {
		path /assets/style.css /favicon.svg /favicon.ico /apple-touch-icon.png
		header_regexp Referer "^https://(.*\.)?(maxchernoff\.ca|duck\.tel)/"
	}
	header @cross-origin {
		Cross-Origin-Resource-Policy cross-origin
	}

	# No sitemaps, so cache the response for a long time
	@sitemaps {
		path /sitemap.xml /sitemap.txt /sitemaps.xml /sitemap.xml.gz /sitemap_index.xml
	}
	handle @sitemaps {
		header Cache-Control max-age=2592000 # 30 days
		respond * 410 {
			close
		}
	}

	# Zip-bomb any requests to malicious URLs
	@bad-url {
		expression `
		(path(
		"*.php*",
		"*/.env",
		"*/.git/*",
		"*phpinfo*",
		"/.*",
		"/*.yml",
		"/actuator/*",
		"/backup",
		"/cgi-bin/*",
		"/config.json",
		"/media/system/js/core.js",
		"/owa/*",
		"/sftp-config.json",
		"/wordpress*",
		"/wp-*"
		) &&
		!path("/.well-known/*")) ||
		header({"User-Agent": "Go-http-client/*"})
		`
	}
	@has-zstd {
		expression `{http.request.header.Accept-Encoding}.contains("zstd")`
	}
	handle @bad-url {
		root * /srv
		file_server {
			status 418
		}

		header Cache-Control max-age=31536000 # 1 year

		handle @has-zstd {
			header Content-Encoding zstd
			header Content-Type "text/html; charset=utf-8"
			rewrite * /files/login.html.zstd
		}
		handle {
			header Content-Encoding gzip
			header Content-Type "text/html; charset=utf-8"
			rewrite * /files/login.html.gz
		}
	}
}

(www.maxchernoff.ca) {
	import default

	# Serve static files from /srv
	try_files {path}.html {path}
	file_server {
		hide /includes/* .gitignore retain-empty-folder
	}

	# Status page
	handle /status {
		header Content-Type "application/json; charset=utf-8"
		header Cache-Control max-age=5
		templates {
			mime application/json
		}
	}

	# Preload some resources
	@html `{http.request.header.Accept}.contains("text/html")`
	header @html Link "</assets/style.css>; rel=\"preload\"; as=\"style\", </favicon.svg>; rel=\"icon\"; type=\"image/svg+xml\""

	# Analytics
	header /analytics/* {
		-Content-Security-Policy
		-Link
		Cache-Control "max-age=60"
	}
	basic_auth /analytics/* {
		analytics {env.CADDY_HTTP_CREDENTIALS}
	}

	# Stardew Valley
	header /tools/Stardew-Valley-Item-Finder/* {
		-Content-Security-Policy
	}
	templates /tools/Stardew-Valley-Item-Finder/* {
		mime text/javascript
		between /*! !*/
	}

	redir /tools/Stardew-Valley-Item-Finder/robots.txt /robots.txt permanent
	redir /tools/stardew-valley-item-finder /tools/Stardew-Valley-Item-Finder/ permanent

	# Convert Markdown files to HTML
	templates
	rewrite /p/* /includes/index.html
	rewrite / /includes/index

	# Atom feed
	@pretty-atom {
		header Sec-Fetch-Mode navigate
	}

	handle /atom.xml {
		header @pretty-atom {
			# Browsers will force a download for "application/atom+xml", but
			# will allow processing "<?xml-stylesheet ...?>" directives for
			# "application/xml", so we'll use that if the request is from a web
			# browser.
			Content-Type "application/xml; charset=utf-8"
			defer
		}
		header Content-Type "application/atom+xml; charset=utf-8"
		header Cache-Control max-age=86400 # 1 day
		header Access-Control-Allow-Origin "*"
		header X-No-Minify "true"
		templates {
			mime application/xml application/atom+xml text/xml
		}
	}

	handle /assets/atom.xslt {
		header Content-Type "application/xslt+xml; charset=utf-8"
		header X-No-Minify "true"
		templates {
			mime application/xslt+xml
		}
	}

	# Block internal paths
	@internal-url {
		expression `{http.request.orig_uri.path}.matches("^/(includes/?|p/?$|domains/?)")`
	}
	handle @internal-url {
		error 404
	}

	# Remove query parameters
	@has-query {
		expression `{query} != ""`
		not path /.well-known/*
		not path /v2/*
	}
	redir @has-query {path} temporary

	# Container Registry
	redir /v2/* https://registry.maxchernoff.ca{uri} temporary

	# Prefetch
	header ?Speculation-Rules `"/assets/speculation-rules.json"`
	header /assets/speculation-rules.json {
		Content-Type application/speculationrules+json
	}

	import minify

	# Handle errors
	handle_errors {
		header Content-Type "text/html; charset=utf-8"
		rewrite * /includes/error.html
		templates
		file_server
	}
}

# Root options
{
	# Directive ordering
	order replace after encode
	order cache before header

	# For the ACME challenge
	email [email protected]

	# Default to maxchernoff.ca if the host is not specified
	default_sni maxchernoff.ca
	fallback_sni maxchernoff.ca

	# Handle socket activation
	auto_https disable_redirects

	default_bind fd/4 {
		protocols h1 h2
	}
	default_bind fdgram/5 {
		protocols h3
	}
	admin off

	# Proxy DNS-over-TLS
	layer4 {
		fd/6 {
			@dot tls {
				alpn dot
			}
			route @dot {
				tls {
					connection_policy {
						alpn dot
						fallback_sni ns.maxchernoff.ca
					}
				}
				proxy {
					upstream tcp/host.containers.internal:53
				}
			}
		}
	}

	# Cache some responses server-side
	cache {
		otter
		api {
			prometheus
		}
	}

	# Configure (non-request) logging
	log {
		output stderr
		format console
		# level DEBUG
	}

	# ECH
	dns rfc2136 {
		server host.containers.internal:53
		key_name caddy
		key_alg hmac-sha256
		key {env.CADDY_TSIG}
	}
	ech ech.maxchernoff.ca

	# Metrics
	metrics {
		per_host
	}
}

# Define the default options for all sites
(default) {
	import default-base

	header {
		# Cache all responses for 1 hour
		?Cache-Control max-age=3600
		# Use HSTS
		Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"
	}

	log {
		output file /var/log/caddy/access.log {
			roll_keep_for 1000d
			roll_keep 100
			mode 640
		}
		format json
	}

	# TLS options
	tls {
		# My analytics show that almost no one except for bots uses TLS 1.2, so
		# I might as well set the minimum to version to 1.3.
		protocols tls1.3
	}
}

(cache) {
	# Block access to the Souin API
	route {
		error /souin-api/* 404
		cache
	}
}

http:// {
	bind fd/3
	redir https://{host}{uri} permanent
}

# Domain information pages
(domain-info) {
	handle / {
		file_server {
			root /srv
		}
		header {
			Content-Security-Policy "default-src 'none'; frame-ancestors 'none'; form-action 'none'; style-src https://www.maxchernoff.ca; img-src https://www.maxchernoff.ca;"
		}
		templates
		rewrite /includes/domains.html
	}
}

# Redirect maxchernoff.ca to www.maxchernoff.ca
maxchernoff.ca {
	import default
	redir https://www.{host}{uri} permanent
}

# The main site
www.maxchernoff.ca {
	root * /srv
	import cache
	import www.maxchernoff.ca
}

# Overleaf reverse proxy
overleaf.maxchernoff.ca {
	import default
	reverse_proxy systemd-overleaf-overleaf:80
	redir /learn/* https://www.overleaf.com{path} permanent
}

# Woodpecker reverse proxy
woodpecker.maxchernoff.ca {
	import default
	header ?Content-Security-Policy ""
	reverse_proxy systemd-woodpecker-server:8000
}

# Stardew Valley redirect
stardew-valley-item-finder.maxchernoff.ca {
	import default

	redir https://www.maxchernoff.ca/tools/Stardew-Valley-Item-Finder{uri} permanent
}

# MTA-STS needs its own subdomain
mta-sts.maxchernoff.ca {
	import default
	import domain-info
	respond "Not Found" 404
}

mta-sts.duck.tel {
	import default
	import domain-info
	respond "Not Found" 404
}

# Flask reverse proxy
api.maxchernoff.ca {
	import default
	import domain-info

	header Cache-Control max-age=5
	import cache

	reverse_proxy systemd-flask:8080
}

# Container registry reverse proxy
registry.maxchernoff.ca {
	import default
	import domain-info
	import cache

	@manifest path /v2/*/manifests/* /v2/_catalog
	header @manifest Cache-Control max-age=15
	header ?Cache-Control max-age=3600 # Cache all responses for 1 hour

	@get-head method GET HEAD
	handle @get-head {
		reverse_proxy systemd-container-registry:23719
	}

	# Fallback
	handle {
		respond "403 Forbidden" 403
	}
}

# DNS Nameserver
ns.maxchernoff.ca {
	import default

	# We need to define a server here for Caddy to fetch a certificate for the
	# layer4 DNS-over-TLS proxy, but otherwise this block serves no purpose, so
	# we might as well show a landing page.
	import domain-info
	respond "Not Found" 404
}

# Outgoing mail server
noreply.maxchernoff.ca {
	import default
	import domain-info
	respond "Not Found" 404
}

# ECH placeholder domain
ech.maxchernoff.ca {
	import default
	import domain-info
	respond "Not Found" 404
}

# Prometheus reverse proxy
prometheus.maxchernoff.ca {
	import default

	header {
		?Content-Security-Policy ""
	}

	basic_auth {
		analytics {env.CADDY_HTTP_CREDENTIALS}
	}

	reverse_proxy systemd-prometheus:9090
}

# Grafana reverse proxy
grafana.maxchernoff.ca {
	import default

	basic_auth {
		analytics {env.CADDY_HTTP_CREDENTIALS}
	}

	reverse_proxy systemd-grafana:3000 {
		header_up X-WEBAUTH-USER "admin"
	}
}

# Secondary domain: duck.tel
duck.tel {
	import default
	import domain-info
	respond "Not Found" 404
}

# Fallback hosts
152.53.36.213, [2a0a:4cc0:2000:172::1], * {
	# I've set the security options here to be as strict as possible since
	# there's no valid reason for anyone to be here.
	header {
		Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"
		Content-Security-Policy "default-src 'self'; sandbox;"
		Content-Type text/html
	}
	tls internal {
		protocols tls1.3
	}

	# I've intentionally omitted the logging here since all that shows up here
	# is bots probing for vulnerabilities.

	# Do nothing except for sending an informative error message.
	respond 421 {
		body `
		<!DOCTYPE html>
		<html lang="en">
		<meta charset="UTF-8">
		<title>Misdirected Request</title>
		<meta name="viewport" content="width=device-width, initial-scale=1.0" >
		<meta name="color-scheme" content="light dark">
		<h1>Misdirected Request</h1>
		<p>Your request was either missing or had an unknown <code>Host</code>
		header. Please try again with a valid hostname.
		<p><a href="https://www.maxchernoff.ca">Return to the main site.</a>
		`
		close
	}
}

# Metrics
http://10.79.79.2:9117 {
	bind 0.0.0.0

	handle /metrics {
		metrics
	}
	handle /souin-api/metrics {
		cache
	}
	handle {
		respond "404 Not Found" 404
	}
}

I'm running Caddy inside a rootless Podman container; my full Caddy configuration (xcaddy scripts, systemd unit files, etc.) is available at the following links

Caddy configuration files

And here are the results of some /metrics scrapes on two different days:

/metrics scrape results
$ curl http://10.79.79.2:9117/metrics | grep -F icanhazip.com  # 2025-06-07
caddy_http_request_duration_seconds_bucket{code="301",handler="static_response",host="icanhazip.com:443",method="CONNECT",server="srv1",le="0.005"} 13
caddy_http_request_duration_seconds_bucket{code="301",handler="static_response",host="icanhazip.com:443",method="CONNECT",server="srv1",le="0.01"} 13
caddy_http_request_duration_seconds_bucket{code="301",handler="static_response",host="icanhazip.com:443",method="CONNECT",server="srv1",le="0.025"} 13
caddy_http_request_duration_seconds_bucket{code="301",handler="static_response",host="icanhazip.com:443",method="CONNECT",server="srv1",le="0.05"} 13
caddy_http_request_duration_seconds_bucket{code="301",handler="static_response",host="icanhazip.com:443",method="CONNECT",server="srv1",le="0.1"} 13
caddy_http_request_duration_seconds_bucket{code="301",handler="static_response",host="icanhazip.com:443",method="CONNECT",server="srv1",le="0.25"} 13
caddy_http_request_duration_seconds_bucket{code="301",handler="static_response",host="icanhazip.com:443",method="CONNECT",server="srv1",le="0.5"} 13
caddy_http_request_duration_seconds_bucket{code="301",handler="static_response",host="icanhazip.com:443",method="CONNECT",server="srv1",le="1"} 13
caddy_http_request_duration_seconds_bucket{code="301",handler="static_response",host="icanhazip.com:443",method="CONNECT",server="srv1",le="2.5"} 13
caddy_http_request_duration_seconds_bucket{code="301",handler="static_response",host="icanhazip.com:443",method="CONNECT",server="srv1",le="5"} 13
caddy_http_request_duration_seconds_bucket{code="301",handler="static_response",host="icanhazip.com:443",method="CONNECT",server="srv1",le="10"} 13
caddy_http_request_duration_seconds_bucket{code="301",handler="static_response",host="icanhazip.com:443",method="CONNECT",server="srv1",le="+Inf"} 13
caddy_http_request_duration_seconds_sum{code="301",handler="static_response",host="icanhazip.com:443",method="CONNECT",server="srv1"} 0.00035868700000000006
caddy_http_request_duration_seconds_count{code="301",handler="static_response",host="icanhazip.com:443",method="CONNECT",server="srv1"} 13
caddy_http_request_size_bytes_bucket{code="301",handler="static_response",host="icanhazip.com:443",method="CONNECT",server="srv1",le="256"} 13
caddy_http_request_size_bytes_bucket{code="301",handler="static_response",host="icanhazip.com:443",method="CONNECT",server="srv1",le="1024"} 13
caddy_http_request_size_bytes_bucket{code="301",handler="static_response",host="icanhazip.com:443",method="CONNECT",server="srv1",le="4096"} 13
caddy_http_request_size_bytes_bucket{code="301",handler="static_response",host="icanhazip.com:443",method="CONNECT",server="srv1",le="16384"} 13
caddy_http_request_size_bytes_bucket{code="301",handler="static_response",host="icanhazip.com:443",method="CONNECT",server="srv1",le="65536"} 13
caddy_http_request_size_bytes_bucket{code="301",handler="static_response",host="icanhazip.com:443",method="CONNECT",server="srv1",le="262144"} 13
caddy_http_request_size_bytes_bucket{code="301",handler="static_response",host="icanhazip.com:443",method="CONNECT",server="srv1",le="1.048576e+06"} 13
caddy_http_request_size_bytes_bucket{code="301",handler="static_response",host="icanhazip.com:443",method="CONNECT",server="srv1",le="4.194304e+06"} 13
caddy_http_request_size_bytes_bucket{code="301",handler="static_response",host="icanhazip.com:443",method="CONNECT",server="srv1",le="+Inf"} 13
caddy_http_request_size_bytes_sum{code="301",handler="static_response",host="icanhazip.com:443",method="CONNECT",server="srv1"} 1519
caddy_http_request_size_bytes_count{code="301",handler="static_response",host="icanhazip.com:443",method="CONNECT",server="srv1"} 13
caddy_http_requests_in_flight{handler="static_response",host="icanhazip.com:443",server="srv1"} 0
caddy_http_requests_total{handler="static_response",host="icanhazip.com:443",server="srv1"} 13
caddy_http_response_duration_seconds_bucket{code="301",handler="static_response",host="icanhazip.com:443",method="CONNECT",server="srv1",le="0.005"} 13
caddy_http_response_duration_seconds_bucket{code="301",handler="static_response",host="icanhazip.com:443",method="CONNECT",server="srv1",le="0.01"} 13
caddy_http_response_duration_seconds_bucket{code="301",handler="static_response",host="icanhazip.com:443",method="CONNECT",server="srv1",le="0.025"} 13
caddy_http_response_duration_seconds_bucket{code="301",handler="static_response",host="icanhazip.com:443",method="CONNECT",server="srv1",le="0.05"} 13
caddy_http_response_duration_seconds_bucket{code="301",handler="static_response",host="icanhazip.com:443",method="CONNECT",server="srv1",le="0.1"} 13
caddy_http_response_duration_seconds_bucket{code="301",handler="static_response",host="icanhazip.com:443",method="CONNECT",server="srv1",le="0.25"} 13
caddy_http_response_duration_seconds_bucket{code="301",handler="static_response",host="icanhazip.com:443",method="CONNECT",server="srv1",le="0.5"} 13
caddy_http_response_duration_seconds_bucket{code="301",handler="static_response",host="icanhazip.com:443",method="CONNECT",server="srv1",le="1"} 13
caddy_http_response_duration_seconds_bucket{code="301",handler="static_response",host="icanhazip.com:443",method="CONNECT",server="srv1",le="2.5"} 13
caddy_http_response_duration_seconds_bucket{code="301",handler="static_response",host="icanhazip.com:443",method="CONNECT",server="srv1",le="5"} 13
caddy_http_response_duration_seconds_bucket{code="301",handler="static_response",host="icanhazip.com:443",method="CONNECT",server="srv1",le="10"} 13
caddy_http_response_duration_seconds_bucket{code="301",handler="static_response",host="icanhazip.com:443",method="CONNECT",server="srv1",le="+Inf"} 13
caddy_http_response_duration_seconds_sum{code="301",handler="static_response",host="icanhazip.com:443",method="CONNECT",server="srv1"} 0.000198498
caddy_http_response_duration_seconds_count{code="301",handler="static_response",host="icanhazip.com:443",method="CONNECT",server="srv1"} 13
caddy_http_response_size_bytes_bucket{code="301",handler="static_response",host="icanhazip.com:443",method="CONNECT",server="srv1",le="256"} 13
caddy_http_response_size_bytes_bucket{code="301",handler="static_response",host="icanhazip.com:443",method="CONNECT",server="srv1",le="1024"} 13
caddy_http_response_size_bytes_bucket{code="301",handler="static_response",host="icanhazip.com:443",method="CONNECT",server="srv1",le="4096"} 13
caddy_http_response_size_bytes_bucket{code="301",handler="static_response",host="icanhazip.com:443",method="CONNECT",server="srv1",le="16384"} 13
caddy_http_response_size_bytes_bucket{code="301",handler="static_response",host="icanhazip.com:443",method="CONNECT",server="srv1",le="65536"} 13
caddy_http_response_size_bytes_bucket{code="301",handler="static_response",host="icanhazip.com:443",method="CONNECT",server="srv1",le="262144"} 13
caddy_http_response_size_bytes_bucket{code="301",handler="static_response",host="icanhazip.com:443",method="CONNECT",server="srv1",le="1.048576e+06"} 13
caddy_http_response_size_bytes_bucket{code="301",handler="static_response",host="icanhazip.com:443",method="CONNECT",server="srv1",le="4.194304e+06"} 13
caddy_http_response_size_bytes_bucket{code="301",handler="static_response",host="icanhazip.com:443",method="CONNECT",server="srv1",le="+Inf"} 13
caddy_http_response_size_bytes_sum{code="301",handler="static_response",host="icanhazip.com:443",method="CONNECT",server="srv1"} 0
caddy_http_response_size_bytes_count{code="301",handler="static_response",host="icanhazip.com:443",method="CONNECT",server="srv1"} 13

$ curl http://10.79.79.2:9117/metrics | grep -F httpbin.org  # 2025-06-08
caddy_http_request_duration_seconds_bucket{code="301",handler="static_response",host="httpbin.org:443",method="CONNECT",server="srv1",le="0.005"} 1
caddy_http_request_duration_seconds_bucket{code="301",handler="static_response",host="httpbin.org:443",method="CONNECT",server="srv1",le="0.01"} 1
caddy_http_request_duration_seconds_bucket{code="301",handler="static_response",host="httpbin.org:443",method="CONNECT",server="srv1",le="0.025"} 1
caddy_http_request_duration_seconds_bucket{code="301",handler="static_response",host="httpbin.org:443",method="CONNECT",server="srv1",le="0.05"} 1
caddy_http_request_duration_seconds_bucket{code="301",handler="static_response",host="httpbin.org:443",method="CONNECT",server="srv1",le="0.1"} 1
caddy_http_request_duration_seconds_bucket{code="301",handler="static_response",host="httpbin.org:443",method="CONNECT",server="srv1",le="0.25"} 1
caddy_http_request_duration_seconds_bucket{code="301",handler="static_response",host="httpbin.org:443",method="CONNECT",server="srv1",le="0.5"} 1
caddy_http_request_duration_seconds_bucket{code="301",handler="static_response",host="httpbin.org:443",method="CONNECT",server="srv1",le="1"} 1
caddy_http_request_duration_seconds_bucket{code="301",handler="static_response",host="httpbin.org:443",method="CONNECT",server="srv1",le="2.5"} 1
caddy_http_request_duration_seconds_bucket{code="301",handler="static_response",host="httpbin.org:443",method="CONNECT",server="srv1",le="5"} 1
caddy_http_request_duration_seconds_bucket{code="301",handler="static_response",host="httpbin.org:443",method="CONNECT",server="srv1",le="10"} 1
caddy_http_request_duration_seconds_bucket{code="301",handler="static_response",host="httpbin.org:443",method="CONNECT",server="srv1",le="+Inf"} 1
caddy_http_request_duration_seconds_sum{code="301",handler="static_response",host="httpbin.org:443",method="CONNECT",server="srv1"} 2.6239e-05
caddy_http_request_duration_seconds_count{code="301",handler="static_response",host="httpbin.org:443",method="CONNECT",server="srv1"} 1
caddy_http_request_size_bytes_bucket{code="301",handler="static_response",host="httpbin.org:443",method="CONNECT",server="srv1",le="256"} 1
caddy_http_request_size_bytes_bucket{code="301",handler="static_response",host="httpbin.org:443",method="CONNECT",server="srv1",le="1024"} 1
caddy_http_request_size_bytes_bucket{code="301",handler="static_response",host="httpbin.org:443",method="CONNECT",server="srv1",le="4096"} 1
caddy_http_request_size_bytes_bucket{code="301",handler="static_response",host="httpbin.org:443",method="CONNECT",server="srv1",le="16384"} 1
caddy_http_request_size_bytes_bucket{code="301",handler="static_response",host="httpbin.org:443",method="CONNECT",server="srv1",le="65536"} 1
caddy_http_request_size_bytes_bucket{code="301",handler="static_response",host="httpbin.org:443",method="CONNECT",server="srv1",le="262144"} 1
caddy_http_request_size_bytes_bucket{code="301",handler="static_response",host="httpbin.org:443",method="CONNECT",server="srv1",le="1.048576e+06"} 1
caddy_http_request_size_bytes_bucket{code="301",handler="static_response",host="httpbin.org:443",method="CONNECT",server="srv1",le="4.194304e+06"} 1
caddy_http_request_size_bytes_bucket{code="301",handler="static_response",host="httpbin.org:443",method="CONNECT",server="srv1",le="+Inf"} 1
caddy_http_request_size_bytes_sum{code="301",handler="static_response",host="httpbin.org:443",method="CONNECT",server="srv1"} 75
caddy_http_request_size_bytes_count{code="301",handler="static_response",host="httpbin.org:443",method="CONNECT",server="srv1"} 1
caddy_http_requests_in_flight{handler="static_response",host="httpbin.org:443",server="srv1"} 0
caddy_http_requests_total{handler="static_response",host="httpbin.org:443",server="srv1"} 1
caddy_http_response_duration_seconds_bucket{code="301",handler="static_response",host="httpbin.org:443",method="CONNECT",server="srv1",le="0.005"} 1
caddy_http_response_duration_seconds_bucket{code="301",handler="static_response",host="httpbin.org:443",method="CONNECT",server="srv1",le="0.01"} 1
caddy_http_response_duration_seconds_bucket{code="301",handler="static_response",host="httpbin.org:443",method="CONNECT",server="srv1",le="0.025"} 1
caddy_http_response_duration_seconds_bucket{code="301",handler="static_response",host="httpbin.org:443",method="CONNECT",server="srv1",le="0.05"} 1
caddy_http_response_duration_seconds_bucket{code="301",handler="static_response",host="httpbin.org:443",method="CONNECT",server="srv1",le="0.1"} 1
caddy_http_response_duration_seconds_bucket{code="301",handler="static_response",host="httpbin.org:443",method="CONNECT",server="srv1",le="0.25"} 1
caddy_http_response_duration_seconds_bucket{code="301",handler="static_response",host="httpbin.org:443",method="CONNECT",server="srv1",le="0.5"} 1
caddy_http_response_duration_seconds_bucket{code="301",handler="static_response",host="httpbin.org:443",method="CONNECT",server="srv1",le="1"} 1
caddy_http_response_duration_seconds_bucket{code="301",handler="static_response",host="httpbin.org:443",method="CONNECT",server="srv1",le="2.5"} 1
caddy_http_response_duration_seconds_bucket{code="301",handler="static_response",host="httpbin.org:443",method="CONNECT",server="srv1",le="5"} 1
caddy_http_response_duration_seconds_bucket{code="301",handler="static_response",host="httpbin.org:443",method="CONNECT",server="srv1",le="10"} 1
caddy_http_response_duration_seconds_bucket{code="301",handler="static_response",host="httpbin.org:443",method="CONNECT",server="srv1",le="+Inf"} 1
caddy_http_response_duration_seconds_sum{code="301",handler="static_response",host="httpbin.org:443",method="CONNECT",server="srv1"} 1.0114e-05
caddy_http_response_duration_seconds_count{code="301",handler="static_response",host="httpbin.org:443",method="CONNECT",server="srv1"} 1
caddy_http_response_size_bytes_bucket{code="301",handler="static_response",host="httpbin.org:443",method="CONNECT",server="srv1",le="256"} 1
caddy_http_response_size_bytes_bucket{code="301",handler="static_response",host="httpbin.org:443",method="CONNECT",server="srv1",le="1024"} 1
caddy_http_response_size_bytes_bucket{code="301",handler="static_response",host="httpbin.org:443",method="CONNECT",server="srv1",le="4096"} 1
caddy_http_response_size_bytes_bucket{code="301",handler="static_response",host="httpbin.org:443",method="CONNECT",server="srv1",le="16384"} 1
caddy_http_response_size_bytes_bucket{code="301",handler="static_response",host="httpbin.org:443",method="CONNECT",server="srv1",le="65536"} 1
caddy_http_response_size_bytes_bucket{code="301",handler="static_response",host="httpbin.org:443",method="CONNECT",server="srv1",le="262144"} 1
caddy_http_response_size_bytes_bucket{code="301",handler="static_response",host="httpbin.org:443",method="CONNECT",server="srv1",le="1.048576e+06"} 1
caddy_http_response_size_bytes_bucket{code="301",handler="static_response",host="httpbin.org:443",method="CONNECT",server="srv1",le="4.194304e+06"} 1
caddy_http_response_size_bytes_bucket{code="301",handler="static_response",host="httpbin.org:443",method="CONNECT",server="srv1",le="+Inf"} 1
caddy_http_response_size_bytes_sum{code="301",handler="static_response",host="httpbin.org:443",method="CONNECT",server="srv1"} 0
caddy_http_response_size_bytes_count{code="301",handler="static_response",host="httpbin.org:443",method="CONNECT",server="srv1"} 1

I realize that this isn't very much to go off of, so please let me know if you need any more details.

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions