You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ubuntu20 Odoo14经Apache2代理频繁报bus.Bus不可用故障排查

Odoo 14 Apache反向代理部署bus.Bus unavailable报错定位修复

前置核验结论

目前已确认:

  • 8072 longpolling端口本地监听状态正常,无端口连通性障碍
  • Odoo配置已开启proxy_mode = True、正确配置longpolling_port = 8072
  • Apache已添加基础反向代理规则
  • Odoo日志每间隔1分钟抛出bus.Bus unavailable异常,对应请求路径为POST /longpolling/poll

核心报错根因

  • Apache代理规则匹配顺序冲突:mod_proxy模块默认按配置文件自上而下的顺序匹配请求路径,匹配到第一条规则后就会停止后续规则匹配。当前配置将全局根路径规则ProxyPass / http://127.0.0.1:8069/放在所有细分路径规则之前,所有发往/longpolling的请求会被优先匹配全局规则,直接转发到8069端口的普通HTTP工作进程,完全绕过了后面配置的8072 longpolling转发规则。
  • Odoo源码内置异常触发逻辑:Odoo 14的bus.controllers.main模块中,/longpolling/poll接口设计为仅由8072端口的gevent长轮询进程响应,当请求被错误转发到8069的普通HTTP进程时,控制器会直接抛出bus.Bus unavailable异常,和日志堆栈完全匹配。
  • 长连接代理参数缺失:即使规则顺序调整正确,默认Apache配置的短超时、响应缓冲机制也会中断longpolling的长轮询连接,持续触发bus连接异常。

落地修复步骤

1. 调整Apache代理配置顺序与长连接参数

  • 移除冗余重复的longpolling规则,将细分路径代理规则移到全局根路径规则之前,追加长轮询适配参数,修正后的VirtualHost代理段参考:
# 优先匹配longpolling路径,置于全局规则之前
<Location /longpolling>
    # 适配长轮询的超时配置,默认30s超时会中断长连接
    ProxyTimeout 2592000
    ProxyPass /longpolling http://127.0.0.1:8072/
    ProxyPassReverse /longpolling http://127.0.0.1:8072/
    # 关闭代理层的连接复用、响应缓冲,适配长轮询协议
    SetEnv proxy-nokeepalive 1
    SetEnv proxy-sendchunks 1
</Location>
# 全局根路径规则放在最后匹配
ProxyPass / http://127.0.0.1:8069/
ProxyPassReverse / http://127.0.0.1:8069/
  • 修正后执行apache2ctl configtest确认配置无语法错误,再重启Apache服务。

2. 校验Odoo侧bus模块完整性

  • 通过Odoo shell连接目标数据库,执行bus模型查询命令,排查数据库表损坏问题:
from odoo import api, SUPERUSER_ID
# 替换为实际数据库名
env = api.Environment(cr, SUPERUSER_ID, {})
env['bus.bus'].search([])
  • 如果执行命令报表不存在、字段缺失错误,升级bus模块即可恢复表结构完整性。

3. 修复效果验证

  • 本地直连代理端口测试longpolling路径转发正确性:
curl -v http://127.0.0.1/longpolling/poll
  • 观察Odoo日志确认不再周期性抛出bus.Bus unavailable报错,浏览器打开Odoo页面后,长连接可正常建立,消息通知、实时面板等bus依赖功能恢复正常。

内容的提问来源于stack exchange,提问作者Omeed Totakhel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.24 21:36:04