Google Cloud上Odoo的Nginx反向代理间歇性404错误排查求助
解决Google Cloud上Odoo+Nginx反向代理间歇性404错误
问题根源分析
从现象(清浏览器缓存临时恢复、error.log无内容)来看,核心问题集中在Nginx配置错误、浏览器缓存策略缺失以及Odoo代理模式未启用这几个方面,其中域名拼写错误是最容易被忽略的硬伤。
具体修复步骤
1. 修正Nginx配置中的域名拼写错误
检查你的Nginx配置文件,发现server_name字段写成了my_domaine_name.com,但实际域名是my_domain_name.com(少了一个字母i)。这个错误会导致Nginx无法匹配到正确的server块,请求可能被转发到默认服务器,从而出现间歇性404。
修改配置:
server { listen 80; server_name my_domain_name.com; # 修正域名拼写 # 其余配置保持不变 }
修改后重启Nginx:
sudo systemctl restart nginx
2. 添加缓存控制规则,避免浏览器缓存过期资源
浏览器缓存旧的静态资源路径是间歇性404的常见诱因,需要给静态资源设置合理缓存期,同时禁止动态内容缓存:
server { # 原有配置... # 针对静态资源设置缓存 location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ { proxy_pass http://odoo; expires 1d; # 静态资源缓存1天 add_header Cache-Control "public, no-transform"; } # 动态内容禁止缓存 location / { proxy_pass http://odoo; add_header Cache-Control "no-cache, no-store, must-revalidate"; add_header Pragma "no-cache"; add_header Expires "0"; } # longpolling配置保持不变 location /longpolling { proxy_pass http://odootchat; } }
3. 调整Nginx日志级别,获取诊断信息
默认的error.log级别仅记录严重错误,无法捕捉404相关细节。修改日志级别为warn,同时通过access.log追踪404请求:
server { access_log /var/log/nginx/access.log; error_log /var/log/nginx/error.log warn; # 提升日志级别 # 其余配置... }
实时查看404请求:
tail -f /var/log/nginx/access.log | grep "404"
4. 启用Odoo的代理模式并更新静态资源
Odoo在反向代理环境下需要启用proxy_mode,否则可能生成错误的资源路径:
- 编辑Odoo配置文件(通常是
/etc/odoo/odoo.conf),添加:proxy_mode = True - 重启Odoo服务:
sudo systemctl restart odoo - 更新Odoo静态资源,确保资源路径正确:
(路径根据你的实际部署调整)sudo -u odoo /usr/bin/odoo-bin --addons-path=/usr/lib/python3/dist-packages/odoo/addons,/var/lib/odoo/addons --update=web
验证
完成上述修改后,清除浏览器缓存,持续测试系统运行状态,观察是否还会出现间歇性404错误。
内容的提问来源于stack exchange,提问作者omar ouhgua
相关产品推荐
相关产品推荐

