宜兴通达竭诚为您服务。

Odoo8中通过域名来自动选择数据库

2020-04-29 07:04:00     作者: Administrator     来源:互联网,版权归作者所有     浏览次数: 290     文字大小:【】【】【

你没有登录,文章中的图片无法正常显示,请点击登录

安装了一个Odoo8的测试环境,给不同的客户建立了不同的数据库,为了不让客户访问时看到其它数据库选择,需要把选择数据库的功能隐藏起来。每个客户分配一个域名,用不同的域名来自动关联数据库。

在之前openerp7应用中,有人提到了通过修改源码的方式来实现,但实际体验不太好,后来看了odoo8中的代码,实际上系统本身就已经提供了类似的功能。

  1. def db_filter(dbs, httprequest=None):  
  2.     httprequest = httprequest or request.httprequest  
  3.     h = httprequest.environ.get('HTTP_HOST''').split(':')[0]  
  4.     d, _, r = h.partition('.')  
  5.     if d == "www" and r:  
  6.         d = r.partition('.')[0]  
  7.     r = openerp.tools.config['dbfilter'].replace('%h', h).replace('%d', d)  
  8.     dbs = [i for i in dbs if re.match(r, i)]  
  9.     return dbs  

从以上代码可以看出,在过滤数据库名称时,系统提供了两个变量(%h,%d),%h是域名,%d是二级域名,如果二级域名是www,则%d是域名中间的部分。所以我们可以通过设计参数文件中dbfilter的内容来达到通过域名自动选择数据库的目的。

我把参数文件中的dbfilter=.*改为了dbfilter=^%d$,表示数据库的名称就是二级域名名称。然后我在浏览器中输入http://db1.xxx.cn ,系统并没直接跳到db1数据库,而是进入到了初始的创建数据库页面。额,是咋回事呢?

通过调试,发现上面函数中的h并不是输入的db1.xxx.cn,而是odoo8,真是奇了怪了。看起来odoo8比较面熟,想到跟nginx中的某个名称相同。因为我安装了nginx进行反向代理,把所有80端口的访问重定向到了8069端口,主要参数配置如下:

  1. upstream odoo8 {  
  2. server 127.0.0.1:8069;  
  3. }  
  4.   
  5. upstream odoo8-im {  
  6. server 127.0.0.1:8072;  
  7. }  
  8.   
  9. server {  
  10. listen 80;  
  11. server_name _;  
  12. add_header Strict-Transport-Security max-age=2592000;  
  13.   
  14. location / {  
  15. proxy_pass http://odoo8;  
  16. }  
  17.   
  18. location /longpolling {  
  19. proxy_pass http://odoo8-im;  
  20. }  
  21.   
  22. location /web/static/ {  
  23. proxy_cache_valid 200 60m;  
  24. proxy_buffering on;  
  25. expires 864000;  
  26. proxy_pass http://odoo8;  
  27. }  
  28. }  

这里可以看出来,因为用了nginx进行反向代理,在转到8069端口时使用了http://odoo8,所以odoo中取得的域名变成了odoo8,这个问题怎么办?想了想看能不能在nginx方面调整配置,将客户端的域名传导到odoo中,看来我们遇到的问题nginx都已经帮我们想到了,通过查询相关资料,将nginx参数调整为如下内容:

  1. upstream odoo8 {  
  2. server 127.0.0.1:8069;  
  3. }  
  4.   
  5. upstream odoo8-im {  
  6. server 127.0.0.1:8072;  
  7. }  
  8.   
  9. server {  
  10. listen 80;  
  11. server_name _;  
  12. add_header Strict-Transport-Security max-age=2592000;  
  13.   
  14. location / {  
  15. proxy_set_header Host $http_host;  
  16. proxy_set_header X-Forward-For $remote_addr;  
  17. proxy_set_header X-Real-IP $remote_addr;  
  18. proxy_pass http://odoo8;  
  19. }  
  20.   
  21. location /longpolling {  
  22. proxy_set_header Host $http_host;  
  23. proxy_set_header X-Forward-For $remote_addr;  
  24. proxy_set_header X-Real-IP $remote_addr;  
  25. proxy_pass http://odoo8-im;  
  26. }  
  27.   
  28. location /web/static/ {  
  29. proxy_set_header Host $http_host;  
  30. proxy_set_header X-Forward-For $remote_addr;  
  31. proxy_set_header X-Real-IP $remote_addr;  
  32. proxy_cache_valid 200 60m;  
  33. proxy_buffering on;  
  34. expires 864000;  
  35. proxy_pass http://odoo8;  
  36. }  
  37. }  

增加了proxy_set_header的设置,重新启动nginx,在浏览器输入http://db1.xxx.cn,odoo就进入了db1数据库,输入http://db2.xxx.cn,系统就进入了db2。

现在终于可以愉快滴跟odoo玩耍了。

另外还可以参考:http://blog.csdn.net/shanzhizi/article/details/47333703

相关文章 评论

服务原则及地区范围

宜兴通达团队,在企业网络维护和企业信息化建设与咨询方面,有10多年经验。

我团队愿与客户一道,力求彻底解决客户问题!
我们不是在给企业提供“头痛医头、脚痛医脚”的暂时解决方案,而是在部署根本性安全与稳定服务!!
我们愿携手客户,建立企业IT规划;杜绝随意安装系统、软件等操作;力求共同维护有序、安全、稳定的网络办公环境!!!
IT服务,服务是根本,客户是上帝;我们提供快速响应、快速上门、快速排查,提供优质高效的服务!!!!

通达团队提供全国范围内的服务,服务形式包括远程协助、电话咨询、电子邮件咨询、传真咨询、问答平台的问题解决等。

宜兴地区提供上门服务:

  • 市区服务:宜城街道、城北街道(屺亭街道)、新街街道、新庄街道、环科园、渚桥开发区
  • 市郊服务:张渚镇、西渚镇、太华镇、徐舍镇、官林镇、杨巷镇、新建镇、和桥镇、高塍镇、万石镇、周铁镇、芳桥镇、丁蜀镇、湖父镇。
  • 联系电话:189-21-343434
  • 在线沟通: