Nginx/反向代理默认超时过短时,Odoo 19 长报表与大批量导入会变成 504。只把 proxy_read_timeout 调到 600 不是治本:并发一高,worker 照样堵死。正确做法是:交互请求短超时;已知长任务改异步入队;必须同步的少数 location 单独放大并限流。本文给出网关、Odoo limit 与观测的配合方式。
分层超时策略
普通 UI/JSON:较短超时,快速失败。入队接口:短超时即可。少数同步导出 location:放大超时,但限制并发与 IP。Odoo 侧同步检查 limit_time_cpu / limit_time_real,与网关匹配,避免一侧已断、一侧仍算。
上传与 body 大小
client_max_body_size 覆盖最大导入文件;应用层做类型白名单与病毒扫描(若有)。超大 CSV 应分批导入或异步作业,而不是一次 POST 百万行。
观测
504 比例进监控,并按 URL 区分报表还是导入。优先把高频 504 改成异步(参见队列报表文),再保留合理超时作为兜底。
落地步骤
- 列出过去两周 504 的 URL Top N。
- 能异步的改入队;不能的单独 location + 限流。
- 压测导入与导出,观察 worker 占用。
验收标准
- 小报表秒开;大导入有异步路径或明确超时提示。
- 504 告警能定位到具体 location。
- 放大超时的路径有并发上限。
504 Top N 治理看板
从反向代理日志按周统计 504 URL,分成三类:可异步报表、可分批导入、必须同步的短交互。
前两类立项目改队列;第三类检查是否误用了重计算。同步调大超时的 location 必须加
limit_req 或等价限流。Odoo 的 limit_time_real 与网关超时差建议
保留几十秒缓冲,避免两边同时杀。变更超时配置走变更单,并在预生产用慢接口验证。
导入模板限制行数与必填列,前端先拦,网关与异步作业做第二道防线。
配置基线示例(需按环境调整)
普通 location:较短 proxy_read_timeout;/web/dataset 类交互同样短超时。
异步入队接口短超时。同步导出专用 location 超时更大但 limit_conn 更严。
client_max_body_size 对齐最大导入。Odoo limit_time_cpu/limit_time_real
与网关匹配。变更后用构造的慢接口验证 504 曲线。把「超时调大」当作临时缓解,工单必须链到异步改造任务。
导入作业显示进度与可取消;取消后清理临时附件,避免盘满。
504 治理看板链到异步改造工单,临时加大超时必须有到期日。
预生产勾选表需覆盖文章编号 323 全部验收点后再约生产窗口。
将文章编号 323 的配置变更记入发版说明,便于回滚对照。
将文章编号 323 的配置变更记入发版说明,便于回滚对照。
将文章编号 323 的配置变更记入发版说明,便于回滚对照。
将文章编号 323 的配置变更记入发版说明,便于回滚对照。
超时变更的到期机制
任何「临时加大超时」工单必须写到期日与异步改造链接,到期自动提醒负责人。
504 Top N 周更。导入前端限行。异步优先。网关与 limit_time_real 对齐。
变更在预生产用慢接口验证。监控按 location 分维,避免只看总 504 率。
中国Odoo网|对照 Odoo 19 企业版网关实践:超时与异步双轨,504 可定位,长任务优先入队。