From 1d86e81d4261f0270fd30a4886c6d94bba62626f Mon Sep 17 00:00:00 2001 From: JianFeeeee Date: Sat, 3 Oct 2026 08:19:17 +0800 Subject: [PATCH] =?UTF-8?q?feat(extension):=20Firefox=20=E5=8C=85=E6=94=B9?= =?UTF-8?q?=E4=B8=BA=E4=BC=98=E5=85=88=E4=BE=9B=E7=BB=99=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=E5=8D=B7=E9=87=8C=E7=9A=84=20AMO=20=E5=B7=B2=E7=AD=BE=E5=90=8D?= =?UTF-8?q?=E5=8C=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 正式版 Firefox 要求扩展经 AMO 签名,未签名一律拒绝且报成「插件损坏」。 签名包不进镜像:它是 AMO 针对具体内容生成的产物,提交进仓库会与源码脱节 (改代码就得重新签名)且是二进制。放数据卷可跨部署存活,更新只覆盖一个文件。 数据卷没有时回落镜像内未签名包(开发/调试仍可用)。 实测三条路径(本地 nginx 沙箱,nginx -t + 真实请求): 数据卷有签名包 → SIGNED;数据卷无 → 回落镜像内未签名包;两者都无 → 404。 注:用 root 而非 alias,因为 alias 配 try_files 会把 URI 再拼一次导致 404。 --- nginx.conf | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/nginx.conf b/nginx.conf index 54f774d..4c5533f 100644 --- a/nginx.conf +++ b/nginx.conf @@ -140,6 +140,24 @@ http { rewrite ^ /extension/install.html last; } + # Firefox 扩展包:优先用数据卷里的 **AMO 已签名包**。 + # 为什么不直接把签名包打进镜像:签名是 AMO 针对具体内容生成的产物, + # 提交进仓库既会与源码版本脱节(改代码就得重新签名),又是二进制。 + # 放进数据卷则能跨部署存活,需要更新时覆盖这一个文件即可。 + # 数据卷里没有(还没签名/没上传)时回落到镜像内的未签名包。 + # 这里用 root 而非 alias:alias 配 try_files 会把 URI 再拼一次, + # 实测容易 404。root=/app/data 时 $uri=/extension/navi-firefox.xpi + # 正好解析成 /app/data/extension/navi-firefox.xpi。 + location = /extension/navi-firefox.xpi { + root /app/data; + try_files $uri @firefox_xpi_image; + } + + location @firefox_xpi_image { + root /app/dashy; + try_files $uri =404; + } + # 容器健康检查(部署脚本与 Docker HEALTHCHECK 使用) location = /healthz { proxy_pass http://127.0.0.1:3005/healthz;