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

如何配置Nginx反向代理实现Odoo OAuth2认证后正常跳转

问题描述
  • 免责声明:我在网络及Nginx方面完全是新手,几天前才首次搭建相关环境。
  • 已配置域名指向部署了Nginx的虚拟服务器,服务器运行Odoo应用。该应用需使用Google OAuth2单点登录(SSO),但授权后页面跳转到http://localhost:8069/google_gmail/confirm?开头的URI,无法正常完成跳转,寻求配置Nginx或Odoo的解决方法。

当前Nginx配置(/etc/nginx/conf.d/odoo.conf)

# Odoo Upstreams
upstream odooserver {
server 127.0.0.1:8069;
}

server {
server_name domain.com;
access_log /var/log/nginx/odoo_access.log;
error_log /var/log/nginx/odoo_error.log;

# Proxy settings
proxy_read_timeout 720s;
proxy_connect_timeout 720s;
proxy_send_timeout 720s;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Real-IP $remote_addr;

# Request for root domain
location / {
proxy_redirect off;
proxy_pass http://127.0.0.1:8069;
}

# Cache static files
location ~* /web/static/ {
proxy_cache_valid 200 90m;
proxy_buffering on;
expires 864000;
proxy_pass http://127.0.01:8069;
}

# Gzip
gzip_types text/css text/less text/plain text/xml application/xml application/json application/javascript;
gzip on;

    listen 443 ssl; # managed by Certbot
    ssl_certificate /etc/letsencrypt/live/domain.com/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/domain.com/privkey.pem; # managed by Certbot
    include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot

}


server {
    if ($host = domain.com) {
        return 301 https://$host$request_uri;
    } # managed by Certbot

listen 80;
server_name domain.com;
    return 404; # managed by Certbot

}
解决方法

问题核心是Odoo未识别到对外暴露的域名和协议,导致生成的回调地址使用了本地localhost:8069,需从Odoo配置、Nginx配置两方面调整:

1. 配置Odoo外部访问地址

编辑Odoo配置文件(通常为/etc/odoo/odoo.conf或自定义配置文件),添加/修改以下参数:

proxy_mode = True
web.base.url = https://domain.com
web.base.url.freeze = True
  • proxy_mode = True:告知Odoo运行在反向代理后,信任Nginx传递的X-Forwarded-*头信息
  • web.base.url:设置Odoo对外的完整访问地址,替换为你的实际域名
  • web.base.url.freeze:固定该地址,避免Odoo动态生成错误回调地址

修改后重启Odoo服务:

sudo systemctl restart odoo

2. 优化Nginx代理配置

  • 修正location /块的重定向规则,替换Odoo返回的本地地址:
location / {
    proxy_pass http://odooserver;
    proxy_redirect http://localhost:8069/ https://domain.com/;
}
  • 修正/web/static/块中的笔误(127.0.01改为127.0.0.1),并使用上游服务器:
location ~* /web/static/ {
    proxy_cache_valid 200 90m;
    proxy_buffering on;
    expires 864000;
    proxy_pass http://odooserver;
}

修改后测试Nginx配置合法性并重启:

sudo nginx -t
sudo systemctl restart nginx

3. 检查Google OAuth2配置

登录Google Cloud控制台,确认OAuth2客户端的已授权重定向URI设置为:
https://domain.com/google_gmail/confirm
确保该地址与Odoo生成的回调地址一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 05:33:57