如何配置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
相关产品推荐
相关产品推荐

