Caddy occasionally hangs on some requests for JS files

1. Output of caddy version:

v2.6.1 h1:EDqo59TyYWhXQnfde93Mmv4FJfYe00dO60zMiEt+pzo=

2. How I run Caddy:

a. System environment:

running caddy in docker, managed by nomad

b. Command:

caddy run --config /local/Caddyfile

c. Service/unit/compose file:

job "web-services" {
	name = "web-services"
	datacenters = ["dc1"]

	vault {
		policies = ["read-kv"]
	}

	group "api" {
		network {
			port "port" {
				to = 8080
			}

			port "inner" {
				to = 5000
			}
		}

		constraint {
			attribute = "${attr.unique.hostname}"
			operator = "!="
			value = "ubuntu-4gb-fsn1-1"
		}

		task "proxy" {
			driver = "docker"
			config {
				image = "ghcr.io/pluralkit/api-proxy"
				ports = ["port"]
			}

			template {
				data = <<EOH
					REDIS_ADDR=10.0.1.3:6379
					{{ with secret "kv/pluralkit" }}
					TOKEN2={{ .Data.api_token2 }}
					{{ end }}
					{{ range nomadService "api-inner" }}
					REMOTE_ADDR=http://{{ .Address }}:{{ .Port }}
					{{ end }}
				EOH

				destination = "local/env"
				env = true
			}

			service {
				name = "api"
				port = "port"
				provider = "nomad"
			}
		}

		task "api" {
			driver = "docker"
			config {
				image = "ghcr.io/pluralkit/pluralkit:62c5c3865a77cc3becd3c1e8e36e91637741e15d"
				entrypoint = ["dotnet", "bin/PluralKit.API.dll"]
				ports = ["inner"]
			}

			template {
				data = <<EOH
					{{ with secret "kv/pluralkit" }}
					PluralKit__Api__ClientSecret = "{{ .Data.discordClientSecret }}"
					PluralKit__DatabasePassword = "{{ .Data.databasePassword }}"
					PluralKit__SentryUrl = "{{ .Data.sentryUrl }}"
					{{ end }}
				EOH

				destination = "local/env"
				env = true
			}

			env {
				PluralKit__Api__ClientId = 466378653216014359

				PluralKit__Database = "Host=10.0.1.3;Port=5432;Username=pluralkit;Database=pluralkit;Maximum Pool Size=300;Minimum Pool Size = 100;Max Auto Prepare=100"
				PluralKit__RedisAddr = "10.0.1.3:6379"
				PluralKit__ElasticUrl = "http://10.0.1.3:9200"

				PluralKit__ConsoleLogLevel = 2
				PluralKit__ElasticLogLevel = 2
				PluralKit__FileLogLevel = 5
			}

			service {
				name = "api-inner"
				port = "inner"
				provider = "nomad"
			}
		}
	}

	group "dashboard" {
		network {
			port "port" {
				to = 8080
			}
		}

		task "dashboard" {
			driver = "docker"
			config {
				image = "ghcr.io/pluralkit/dashboard:371d677af1fe7377e70f1a22066c9ccd174f318e"
				ports = ["port"]
			}

			service {
				name = "dashboard"
				port = "port"
				provider = "nomad"
			}
		}
	}

	group "caddy" {
		volume "data" {
			type = "host"
			read_only = false
			source = "caddy_data"
		}

		network {
			port "http" {
				static = 80
				to = 80
			}
			port "https" {
				static = 443
				to = 443
			}
		}

		task "caddy" {
			driver = "docker"
			config {
				image = "caddy"
				ports = ["http", "https"]
				entrypoint = ["/bin/sh", "-c", "caddy run --config /local/Caddyfile"]
			}

			template {
				data = <<EOH
					"dash.pluralkit.me" {
						reverse_proxy {{ range nomadService "dashboard" }} http://{{ .Address }}:{{ .Port }} {{ end }}
					}

					"api.pluralkit.me" {
						reverse_proxy {{ range nomadService "api" }} http://{{ .Address }}:{{ .Port }} {{ end }} {
							header_up X-Real-IP {remote_host}
						}
					}

					"stats.pluralkit.me" {
						reverse_proxy http://10.0.1.2:3000
					}

					"sentry.pluralkit.me" {
						reverse_proxy http://10.0.1.2:9000 {
							header_up -Connection
						}
					}

					"plausible.pluralkit.me" {
						reverse_proxy http://10.0.1.2:8000
					}

					"pk-webs.spectralitree.com" {
						redir https://dash.pluralkit.me{uri} permanent
					}

					"pk-webs-beta.spectralitree.com" {
						redir https://dash.pluralkit.me{uri} permanent
					}
				EOH
			
				destination = "local/Caddyfile"
			}

			volume_mount {
				volume = "data"
				destination = "/data/caddy"
			}
		}
	}
}

d. My complete Caddy config:

This is shown as a template in the above point (service file) but here’s a generated file

{
	debug
}

"dash.pluralkit.me" {
    reverse_proxy  http://10.0.1.2:29031 
}

"api.pluralkit.me" {
    reverse_proxy  http://10.0.1.2:20222  {
        header_up X-Real-IP {remote_host}
    }
}

"stats.pluralkit.me" {
    reverse_proxy http://10.0.1.2:3000
}

"sentry.pluralkit.me" {
    reverse_proxy http://10.0.1.2:9000 {
        header_up -Connection
    }
}

"plausible.pluralkit.me" {
    reverse_proxy http://10.0.1.2:8000
}

"pk-webs.spectralitree.com" {
    redir https://dash.pluralkit.me{uri} permanent
}

"pk-webs-beta.spectralitree.com" {
    redir https://dash.pluralkit.me{uri} permanent
}

3. The problem I’m having:

I am hosting a webapp with caddy as a reverse proxy, and a couple times a day caddy will hang when trying to proxy requests for javascript files - HTML files do load correctly. (Querying the backend directly returns the file.) When that happens, requests are not logged, which is why my attempts to make the request using curl are not shown in logs. Caddy is still able to serve requests for other domains while requests for this domain are hanging.

4. Error messages and/or full log output:

This is a sample of production logs so I have redacted any public IP addresses.

{"level":"debug","ts":1664362388.2791417,"logger":"http.handlers.reverse_proxy","msg":"upstream roundtrip","upstream":"10.0.1.2:29031","duration":0.000769309,"request":{"remote_ip":"x.x.x.x","remote_port":"49355","proto":"HTTP/3.0","method":"GET","host":"dash.pluralkit.me","uri":"/myriad.png","headers":{"X-Forwarded-Proto":["https"],"Sec-Fetch-Mode":["no-cors"],"Sec-Fetch-Dest":["image"],"Accept-Encoding":["gzip, deflate, br"],"Sec-Ch-Ua":["\"Google Chrome\";v=\"105\", \"Not)A;Brand\";v=\"8\", \"Chromium\";v=\"105\""],"X-Forwarded-For":["x.x.x.x"],"Accept-Language":["fr-FR,fr;q=0.9,en-US;q=0.8,en;q=0.7"],"User-Agent":["Mozilla/5.0 (Linux; Android 9; CPH1907) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/105.0.0.0 Mobile Safari/537.36"],"Sec-Ch-Ua-Mobile":["?1"],"Sec-Ch-Ua-Platform":["\"Android\""],"Accept":["image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8"],"Sec-Fetch-Site":["same-origin"],"Referer":["https://dash.pluralkit.me/dash?tab=members"],"X-Forwarded-Host":["dash.pluralkit.me"]},"tls":{"resumed":false,"version":0,"cipher_suite":0,"proto":"","server_name":""}},"headers":{"Date":["Wed, 28 Sep 2022 10:53:08 GMT"],"X-Pluralkit-Version":["3bae5344b651fd66ed38524f07eac471b07fea73"],"Content-Length":["881"],"Content-Type":["text/html"]},"status":200}c
{"level":"debug","ts":1664362388.432295,"logger":"http.handlers.reverse_proxy","msg":"selected upstream","dial":"10.0.1.2:9000","total_upstreams":1}
{"level":"debug","ts":1664362389.2288084,"logger":"http.handlers.reverse_proxy","msg":"selected upstream","dial":"10.0.1.2:9000","total_upstreams":1}
{"level":"debug","ts":1664362390.400206,"logger":"http.handlers.reverse_proxy","msg":"selected upstream","dial":"10.0.1.2:9000","total_upstreams":1}
{"level":"debug","ts":1664362390.8909774,"logger":"http.handlers.reverse_proxy","msg":"selected upstream","dial":"10.0.1.2:9000","total_upstreams":1}
{"level":"debug","ts":1664362390.8959568,"logger":"http.handlers.reverse_proxy","msg":"selected upstream","dial":"10.0.1.2:9000","total_upstreams":1}
{"level":"debug","ts":1664362391.9108324,"logger":"http.handlers.reverse_proxy","msg":"selected upstream","dial":"10.0.1.2:9000","total_upstreams":1}
{"level":"debug","ts":1664362425.2603226,"logger":"http.handlers.reverse_proxy","msg":"selected upstream","dial":"10.0.1.2:29031","total_upstreams":1}
{"level":"debug","ts":1664362425.2612011,"logger":"http.handlers.reverse_proxy","msg":"upstream roundtrip","upstream":"10.0.1.2:29031","duration":0.000792064,"request":{"remote_ip":"x.x.x.x","remote_port":"42940","proto":"HTTP/3.0","method":"GET","host":"dash.pluralkit.me","uri":"/myriad.png","headers":{"Sec-Fetch-Site":["same-origin"],"Sec-Fetch-Dest":["image"],"Referer":["https://dash.pluralkit.me/dash?tab=members"],"Sec-Fetch-Mode":["no-cors"],"Sec-Ch-Ua-Mobile":["?1"],"Accept-Encoding":["gzip, deflate, br"],"X-Forwarded-Host":["dash.pluralkit.me"],"Accept":["image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8"],"User-Agent":["Mozilla/5.0 (Linux; Android 9; CPH1907) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/105.0.0.0 Mobile Safari/537.36"],"X-Forwarded-For":["x.x.x.x"],"Sec-Ch-Ua-Platform":["\"Android\""],"Sec-Ch-Ua":["\"Google Chrome\";v=\"105\", \"Not)A;Brand\";v=\"8\", \"Chromium\";v=\"105\""],"Accept-Language":["fr-FR,fr;q=0.9,en-US;q=0.8,en;q=0.7"],"X-Forwarded-Proto":["https"]},"tls":{"resumed":false,"version":0,"cipher_suite":0,"proto":"","server_name":""}},"headers":{"Content-Length":["881"],"Content-Type":["text/html"],"X-Pluralkit-Version":["3bae5344b651fd66ed38524f07eac471b07fea73"],"Date":["Wed, 28 Sep 2022 10:53:45 GMT"]},"status":200}
{"level":"debug","ts":1664362425.2833362,"logger":"http.handlers.reverse_proxy","msg":"selected upstream","dial":"10.0.1.2:9000","total_upstreams":1}
{"level":"debug","ts":1664362425.2837489,"logger":"http.handlers.reverse_proxy","msg":"selected upstream","dial":"10.0.1.2:9000","total_upstreams":1}
{"level":"debug","ts":1664362426.2671075,"logger":"http.handlers.reverse_proxy","msg":"selected upstream","dial":"10.0.1.2:9000","total_upstreams":1}
{"level":"debug","ts":1664362461.6895444,"logger":"events","msg":"event","name":"tls_get_certificate","id":"25ec04e6-b402-45d9-8de3-6b38fae5186a","origin":"tls","data":{"client_hello":{"CipherSuites":[47802,4865,4866,4867,49196,49195,52393,49200,49199,52392,49162,49161,49172,49171,157,156,53,47,49160,49170,10],"ServerName":"dash.pluralkit.me","SupportedCurves":[27242,29,23,24,25],"SupportedPoints":"AA==","SignatureSchemes":[1027,2052,1025,1283,515,2053,2053,1281,2054,1537,513],"SupportedProtos":["h2","http/1.1"],"SupportedVersions":[35466,772,771,770,769],"Conn":{}}}}
{"level":"debug","ts":1664362461.6896212,"logger":"tls.handshake","msg":"choosing certificate","identifier":"dash.pluralkit.me","num_choices":1}
{"level":"debug","ts":1664362461.6896403,"logger":"tls.handshake","msg":"default certificate selection results","identifier":"dash.pluralkit.me","subjects":["dash.pluralkit.me"],"managed":true,"issuer_key":"acme-v02.api.letsencrypt.org-directory","hash":"82a9906d9d9da8f72924d5e10900cb5a994c063e877a9c4b573d3fee4acdfd60"}
{"level":"debug","ts":1664362461.6896505,"logger":"tls.handshake","msg":"matched certificate in cache","remote_ip":"x.x.x.x","remote_port":"39003","subjects":["dash.pluralkit.me"],"managed":true,"expiration":1670891278,"hash":"82a9906d9d9da8f72924d5e10900cb5a994c063e877a9c4b573d3fee4acdfd60"}
{"level":"debug","ts":1664362461.7750154,"logger":"http.handlers.reverse_proxy","msg":"selected upstream","dial":"10.0.1.2:29031","total_upstreams":1}
{"level":"debug","ts":1664362461.7758636,"logger":"http.handlers.reverse_proxy","msg":"upstream roundtrip","upstream":"10.0.1.2:29031","duration":0.000793587,"request":{"remote_ip":"x.x.x.x.x","remote_port":"39003","proto":"HTTP/2.0","method":"GET","host":"dash.pluralkit.me","uri":"/","headers":{"X-Forwarded-Host":["dash.pluralkit.me"],"Accept-Language":["nl-NL,nl;q=0.9"],"Accept-Encoding":["gzip, deflate, br"],"User-Agent":["Mozilla/5.0 (iPhone; CPU iPhone OS 16_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.0 Mobile/15E148 Safari/604.1"],"Accept":["text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"],"X-Forwarded-For":["x.x.x.x"],"X-Forwarded-Proto":["https"]},"tls":{"resumed":false,"version":772,"cipher_suite":4865,"proto":"h2","server_name":"dash.pluralkit.me"}},"headers":{"Content-Type":["text/html"],"X-Pluralkit-Version":["3bae5344b651fd66ed38524f07eac471b07fea73"],"Date":["Wed, 28 Sep 2022 10:54:21 GMT"],"Content-Length":["881"]},"status":200}
{"level":"debug","ts":1664362461.9868724,"logger":"http.handlers.reverse_proxy","msg":"selected upstream","dial":"10.0.1.2:29031","total_upstreams":1}
{"level":"debug","ts":1664362461.9868724,"logger":"http.handlers.reverse_proxy","msg":"selected upstream","dial":"10.0.1.2:29031","total_upstreams":1}
{"level":"debug","ts":1664362461.98833,"logger":"http.handlers.reverse_proxy","msg":"upstream roundtrip","upstream":"10.0.1.2:29031","duration":0.00136425,"request":{"remote_ip":"x.x.x.x","remote_port":"39003","proto":"HTTP/2.0","method":"GET","host":"dash.pluralkit.me","uri":"/assets/vendor.17033500.css","headers":{"X-Forwarded-Proto":["https"],"X-Forwarded-Host":["dash.pluralkit.me"],"User-Agent":["Mozilla/5.0 (iPhone; CPU iPhone OS 16_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.0 Mobile/15E148 Safari/604.1"],"Accept-Language":["nl-NL,nl;q=0.9"],"Referer":["https://dash.pluralkit.me/"],"Accept":["text/css,*/*;q=0.1"],"Accept-Encoding":["gzip, deflate, br"],"X-Forwarded-For":["x.x.x.x"]},"tls":{"resumed":false,"version":772,"cipher_suite":4865,"proto":"h2","server_name":"dash.pluralkit.me"}},"headers":{"Content-Type":["text/css"],"X-Pluralkit-Version":["3bae5344b651fd66ed38524f07eac471b07fea73"],"Date":["Wed, 28 Sep 2022 10:54:21 GMT"]},"status":200}
{"level":"debug","ts":1664362461.989565,"logger":"http.handlers.reverse_proxy","msg":"upstream roundtrip","upstream":"10.0.1.2:29031","duration":0.002450773,"request":{"remote_ip":"x.x.x.x","remote_port":"39003","proto":"HTTP/2.0","method":"GET","host":"dash.pluralkit.me","uri":"/assets/index.b08b4cb5.js","headers":{"X-Forwarded-Proto":["https"],"Accept-Encoding":["gzip, deflate, br"],"Accept-Language":["nl-NL,nl;q=0.9"],"Referer":["https://dash.pluralkit.me/"],"Accept":["*/*"],"Origin":["https://dash.pluralkit.me"],"X-Forwarded-For":["x.x.x.x"],"X-Forwarded-Host":["dash.pluralkit.me"],"User-Agent":["Mozilla/5.0 (iPhone; CPU iPhone OS 16_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.0 Mobile/15E148 Safari/604.1"]},"tls":{"resumed":false,"version":772,"cipher_suite":4865,"proto":"h2","server_name":"dash.pluralkit.me"}},"headers":{"Content-Type":["application/javascript"],"X-Pluralkit-Version":["3bae5344b651fd66ed38524f07eac471b07fea73"],"Date":["Wed, 28 Sep 2022 10:54:21 GMT"]},"status":200}
{"level":"debug","ts":1664362462.0269926,"logger":"http.handlers.reverse_proxy","msg":"selected upstream","dial":"10.0.1.2:29031","total_upstreams":1}
{"level":"debug","ts":1664362462.0282197,"logger":"http.handlers.reverse_proxy","msg":"upstream roundtrip","upstream":"10.0.1.2:29031","duration":0.001163759,"request":{"remote_ip":"x.x.x.x","remote_port":"39003","proto":"HTTP/2.0","method":"GET","host":"dash.pluralkit.me","uri":"/assets/index.b9d54d0a.css","headers":{"Accept-Language":["nl-NL,nl;q=0.9"],"Referer":["https://dash.pluralkit.me/"],"X-Forwarded-For":["x.x.x.x"],"X-Forwarded-Proto":["https"],"X-Forwarded-Host":["dash.pluralkit.me"],"Accept":["text/css,*/*;q=0.1"],"Accept-Encoding":["gzip, deflate, br"],"User-Agent":["Mozilla/5.0 (iPhone; CPU iPhone OS 16_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.0 Mobile/15E148 Safari/604.1"]},"tls":{"resumed":false,"version":772,"cipher_suite":4865,"proto":"h2","server_name":"dash.pluralkit.me"}},"headers":{"Content-Type":["text/css"],"X-Pluralkit-Version":["3bae5344b651fd66ed38524f07eac471b07fea73"],"Date":["Wed, 28 Sep 2022 10:54:22 GMT"]},"status":200}
{"level":"debug","ts":1664362462.2048528,"logger":"http.handlers.reverse_proxy","msg":"selected upstream","dial":"10.0.1.2:8000","total_upstreams":1}
{"level":"debug","ts":1664362462.2178133,"logger":"http.handlers.reverse_proxy","msg":"selected upstream","dial":"10.0.1.2:29031","total_upstreams":1}
{"level":"debug","ts":1664362462.221045,"logger":"http.handlers.reverse_proxy","msg":"upstream roundtrip","upstream":"10.0.1.2:29031","duration":0.003155531,"request":{"remote_ip":"x.x.x.x","remote_port":"39003","proto":"HTTP/2.0","method":"GET","host":"dash.pluralkit.me","uri":"/assets/highlight.js/styles/github-dark.css","headers":{"Accept":["text/css,*/*;q=0.1"],"Accept-Encoding":["gzip, deflate, br"],"User-Agent":["Mozilla/5.0 (iPhone; CPU iPhone OS 16_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.0 Mobile/15E148 Safari/604.1"],"X-Forwarded-For":["x.x.x.x"],"X-Forwarded-Proto":["https"],"X-Forwarded-Host":["dash.pluralkit.me"],"Accept-Language":["nl-NL,nl;q=0.9"],"Referer":["https://dash.pluralkit.me/"]},"tls":{"resumed":false,"version":772,"cipher_suite":4865,"proto":"h2","server_name":"dash.pluralkit.me"}},"error":"EOF"}
{"level":"error","ts":1664362462.2211006,"logger":"http.log.error","msg":"EOF","request":{"remote_ip":"x.x.x.x","remote_port":"39003","proto":"HTTP/2.0","method":"GET","host":"dash.pluralkit.me","uri":"/assets/highlight.js/styles/github-dark.css","headers":{"Accept-Language":["nl-NL,nl;q=0.9"],"Referer":["https://dash.pluralkit.me/"],"Accept":["text/css,*/*;q=0.1"],"Accept-Encoding":["gzip, deflate, br"],"User-Agent":["Mozilla/5.0 (iPhone; CPU iPhone OS 16_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.0 Mobile/15E148 Safari/604.1"]},"tls":{"resumed":false,"version":772,"cipher_suite":4865,"proto":"h2","server_name":"dash.pluralkit.me"}},"duration":0.003339429,"status":502,"err_id":"gg20skgem","err_trace":"reverseproxy.statusError (reverseproxy.go:1271)"}
{"level":"debug","ts":1664362462.2529533,"logger":"http.handlers.reverse_proxy","msg":"selected upstream","dial":"10.0.1.2:29031","total_upstreams":1}
{"level":"debug","ts":1664362462.254958,"logger":"http.handlers.reverse_proxy","msg":"upstream roundtrip","upstream":"10.0.1.2:29031","duration":0.001926137,"request":{"remote_ip":"x.x.x.x","remote_port":"39003","proto":"HTTP/2.0","method":"GET","host":"dash.pluralkit.me","uri":"/assets/vendor.9bde4a0a.js","headers":{"Origin":["https://dash.pluralkit.me"],"Accept-Language":["nl-NL,nl;q=0.9"],"Referer":["https://dash.pluralkit.me/"],"X-Forwarded-Proto":["https"],"X-Forwarded-Host":["dash.pluralkit.me"],"Accept":["*/*"],"Accept-Encoding":["gzip, deflate, br"],"User-Agent":["Mozilla/5.0 (iPhone; CPU iPhone OS 16_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.0 Mobile/15E148 Safari/604.1"],"X-Forwarded-For":["x.x.x.x"]},"tls":{"resumed":false,"version":772,"cipher_suite":4865,"proto":"h2","server_name":"dash.pluralkit.me"}},"headers":{"X-Pluralkit-Version":["3bae5344b651fd66ed38524f07eac471b07fea73"],"Date":["Wed, 28 Sep 2022 10:54:22 GMT"],"Content-Type":["application/javascript"]},"status":200}
{"level":"debug","ts":1664362462.49283,"logger":"http.handlers.reverse_proxy","msg":"selected upstream","dial":"10.0.1.2:29031","total_upstreams":1}
{"level":"debug","ts":1664362462.493922,"logger":"http.handlers.reverse_proxy","msg":"upstream roundtrip","upstream":"10.0.1.2:29031","duration":0.001006531,"request":{"remote_ip":"x.x.x.x","remote_port":"39003","proto":"HTTP/2.0","method":"GET","host":"dash.pluralkit.me","uri":"/assets/vendor.9bde4a0a.js","headers":{"Accept":["*/*"],"Accept-Encoding":["gzip, deflate, br"],"User-Agent":["Mozilla/5.0 (iPhone; CPU iPhone OS 16_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.0 Mobile/15E148 Safari/604.1"],"X-Forwarded-For":["x.x.x.x"],"X-Forwarded-Proto":["https"],"X-Forwarded-Host":["dash.pluralkit.me"],"Accept-Language":["nl-NL,nl;q=0.9"],"Referer":["https://dash.pluralkit.me/"]},"tls":{"resumed":false,"version":772,"cipher_suite":4865,"proto":"h2","server_name":"dash.pluralkit.me"}},"headers":{"Date":["Wed, 28 Sep 2022 10:54:22 GMT"],"Content-Type":["application/javascript"],"X-Pluralkit-Version":["3bae5344b651fd66ed38524f07eac471b07fea73"]},"status":200}
{"level":"debug","ts":1664362462.5272846,"logger":"http.handlers.reverse_proxy","msg":"selected upstream","dial":"10.0.1.2:29031","total_upstreams":1}
{"level":"debug","ts":1664362462.5283976,"logger":"http.handlers.reverse_proxy","msg":"upstream roundtrip","upstream":"10.0.1.2:29031","duration":0.001036428,"request":{"remote_ip":"x.x.x.x","remote_port":"39003","proto":"HTTP/2.0","method":"GET","host":"dash.pluralkit.me","uri":"/myriad.png","headers":{"X-Forwarded-For":["x.x.x.x"],"X-Forwarded-Proto":["https"],"X-Forwarded-Host":["dash.pluralkit.me"],"Accept":["*/*"],"Accept-Encoding":["gzip, deflate, br"],"User-Agent":["Mozilla/5.0 (iPhone; CPU iPhone OS 16_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.0 Mobile/15E148 Safari/604.1"],"Accept-Language":["nl-NL,nl;q=0.9"],"Referer":["https://dash.pluralkit.me/"]},"tls":{"resumed":false,"version":772,"cipher_suite":4865,"proto":"h2","server_name":"dash.pluralkit.me"}},"headers":{"Content-Type":["text/html"],"X-Pluralkit-Version":["3bae5344b651fd66ed38524f07eac471b07fea73"],"Date":["Wed, 28 Sep 2022 10:54:22 GMT"],"Content-Length":["881"]},"status":200}
{"level":"debug","ts":1664362462.744733,"logger":"http.handlers.reverse_proxy","msg":"selected upstream","dial":"10.0.1.2:9000","total_upstreams":1}
{"level":"debug","ts":1664362463.2885842,"logger":"http.stdlib","msg":"http: TLS handshake error from 109.36.140.191:39006: EOF"}
{"level":"debug","ts":1664362463.516562,"logger":"http.handlers.reverse_proxy","msg":"selected upstream","dial":"10.0.1.2:9000","total_upstreams":1}
{"level":"debug","ts":1664362477.6979172,"logger":"http.handlers.reverse_proxy","msg":"selected upstream","dial":"10.0.1.2:9000","total_upstreams":1}
{"level":"debug","ts":1664362477.698019,"logger":"http.handlers.reverse_proxy","msg":"selected upstream","dial":"10.0.1.2:9000","total_upstreams":1}
{"level":"debug","ts":1664362478.329839,"logger":"http.handlers.reverse_proxy","msg":"selected upstream","dial":"10.0.1.2:9000","total_upstreams":1}
{"level":"debug","ts":1664362478.3329945,"logger":"http.handlers.reverse_proxy","msg":"selected upstream","dial":"10.0.1.2:9000","total_upstreams":1}
{"level":"debug","ts":1664362478.3332086,"logger":"http.handlers.reverse_proxy","msg":"selected upstream","dial":"10.0.1.2:9000","total_upstreams":1}
{"level":"debug","ts":1664362479.3548496,"logger":"http.handlers.reverse_proxy","msg":"selected upstream","dial":"10.0.1.2:9000","total_upstreams":1}
{"level":"debug","ts":1664362527.210284,"logger":"http.handlers.reverse_proxy","msg":"selected upstream","dial":"10.0.1.2:9000","total_upstreams":1}
{"level":"debug","ts":1664362546.082937,"logger":"events","msg":"event","name":"tls_get_certificate","id":"b88addc1-9620-49e8-b309-096efb0f8232","origin":"tls","data":{"client_hello":{"CipherSuites":[56026,4865,4866,4867,49196,49195,52393,49200,49199,52392,49162,49161,49172,49171,157,156,53,47,49160,49170,10],"ServerName":"dash.pluralkit.me","SupportedCurves":[64250,29,23,24,25],"SupportedPoints":"AA==","SignatureSchemes":[1027,2052,1025,1283,515,2053,2053,1281,2054,1537,513],"SupportedProtos":["h2","http/1.1"],"SupportedVersions":[6682,772,771,770,769],"Conn":{}}}}
{"level":"debug","ts":1664362546.0829973,"logger":"tls.handshake","msg":"choosing certificate","identifier":"dash.pluralkit.me","num_choices":1}
{"level":"debug","ts":1664362546.0830133,"logger":"tls.handshake","msg":"default certificate selection results","identifier":"dash.pluralkit.me","subjects":["dash.pluralkit.me"],"managed":true,"issuer_key":"acme-v02.api.letsencrypt.org-directory","hash":"82a9906d9d9da8f72924d5e10900cb5a994c063e877a9c4b573d3fee4acdfd60"}
{"level":"debug","ts":1664362546.0830233,"logger":"tls.handshake","msg":"matched certificate in cache","remote_ip":"x.x.x.x","remote_port":"54810","subjects":["dash.pluralkit.me"],"managed":true,"expiration":1670891278,"hash":"82a9906d9d9da8f72924d5e10900cb5a994c063e877a9c4b573d3fee4acdfd60"}
{"level":"debug","ts":1664362546.713755,"logger":"http.handlers.reverse_proxy","msg":"selected upstream","dial":"10.0.1.2:29031","total_upstreams":1}
{"level":"debug","ts":1664362546.7138927,"logger":"http.handlers.reverse_proxy","msg":"selected upstream","dial":"10.0.1.2:29031","total_upstreams":1}
{"level":"debug","ts":1664362546.713954,"logger":"http.handlers.reverse_proxy","msg":"selected upstream","dial":"10.0.1.2:29031","total_upstreams":1}

5. What I already tried:

  • I tried using curl instead of a web browser (no change in behaviour).
  • I tried enabling debug mode to see if there is any useful information in logs (I couldn’t find anything)

6. Links to relevant resources:

Try enabling access logs, which actually log the requests:

log

(put that in your sites where the hang is happening)

What’s an example curl command we can use to reproduce this ourselves?

hey, I switched to a different webserver (instead of caddy) and the problem persists, so this isn’t an issue with caddy. sorry about that!

1 Like

This topic was automatically closed after 30 days. New replies are no longer allowed.