问题现象
在 Umami 管理后台的 设置 → 个人资料 中,可以选择"中文",但点击 "确定" 后无法保存语言偏好。浏览器开发者工具控制台报错:
GET /intl/messages/zh-CN.json 404 (NOT FOUND)
容器内测试该地址返回正常(200 OK),但通过外部 80 端口访问即返回 404。
根因分析
Umami 切换语言时,前端会请求 /intl/messages/zh-CN.json 获取中文翻译文件。该文件在容器内存在且 Web 服务正常,但 Nginx 反向代理配置不完整:
配置文件中只对 /_next/、/api、/login、/dashboard 等部分路径做了 proxy_pass,缺少 /intl/ 路径的转发规则。请求到达 Nginx 后无法匹配任何 location,直接被当作静态文件去本地查找,找不到便返回 404,请求从未到达后端的 Umami 容器。
⚠️ 关键点:语言翻译文件是通过独立的 /intl/ 路径加载的,不属于常规的 API 或页面路由,很容易遗漏。
解决方案
在 Nginx 配置中增加 /intl/ 的代理规则即可:
location /intl/ {
proxy_pass http://127.0.0.1:3000;
proxy_set_header Host $host;
}
保存后重载配置:
sudo nginx -t
sudo systemctl reload nginx
知识点总结
| 问题 | 原因 | 解决 |
|---|---|---|
| 中文语言无法保存 | /intl/ 路径未加入反向代理 |
在 Nginx 中补充 /intl/ 的 proxy_pass 规则 |
| 控制台报 404 | Nginx 找不到文件,未转发到 Umami | 重载 Nginx 配置即可 |
部署 Umami 或其他 Next.js 应用时,如果遇到类似的功能异常,可以优先检查浏览器控制台的 404 请求路径,补充遗漏的反向代理规则往往是解决问题的关键。
评论(3)
发表评论