From 1f8252a6bcf817c4ed80610d64ae6aa23fbeba97 Mon Sep 17 00:00:00 2001 From: yml2213 Date: Thu, 1 Oct 2026 15:39:03 +0800 Subject: [PATCH] =?UTF-8?q?perf(caddy):=20encode=20=E6=8F=90=E5=88=B0=20ha?= =?UTF-8?q?ndle=20=E4=B9=8B=E5=89=8D=EF=BC=8CAPI=20=E5=93=8D=E5=BA=94?= =?UTF-8?q?=E7=BB=88=E4=BA=8E=E4=BC=9A=E8=A2=AB=E5=8E=8B=E7=BC=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 抓包发现订单列表响应 75.9KB 明文下发(客户端已发 Accept-Encoding: gzip, br, 响应既无 content-encoding 也无压缩)。原因在 Caddyfile:`encode zstd gzip` 写在 `handle /api/*` 之后,而 Caddy 的 route 按书写顺序执行、handle 匹配后即终止链路, 于是所有 API 响应都绕过了编码器;静态文件一直是压缩的,只是因为它们落在 encode 之后的 file_server。 把 encode 提到 route 内最前面即可(SSE 的 text/event-stream 不在 encode 默认 压缩类型里,事件流不受影响)。后台与打手端 API 同时受益。 验证:部署后 curl 订单列表应出现 content-encoding: gzip 且体积大幅下降; 静态资源仍然压缩;/api/v1/admin/realtime 仍正常流式返回。 --- deploy/caddy/Caddyfile | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/deploy/caddy/Caddyfile b/deploy/caddy/Caddyfile index d78e946e..21ad4944 100644 --- a/deploy/caddy/Caddyfile +++ b/deploy/caddy/Caddyfile @@ -1,5 +1,11 @@ (order-site) { route { + # 必须放在 handle 之前:Caddy 的 route 按书写顺序执行,而 handle 匹配后即终止链路, + # 放在后面会让**所有 API 响应都跳过压缩**(生产实测订单列表 75.9KB 明文下发, + # 客户端已发 Accept-Encoding: gzip, br)。静态文件之所以一直是压缩的, + # 是因为静态文件落在 encode 之后的 file_server。SSE 响应不会被压缩(见 encode 默认规则)。 + encode zstd gzip + handle /api/* { reverse_proxy backend:3000 } @@ -12,7 +18,6 @@ reverse_proxy backend:3000 } - encode zstd gzip root * /srv try_files {path} /index.html file_server