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

简介: ODOO8中通过域名来自动选择数据库
安装了一个Odoo8的测试环境,给不同的客户建立了不同的数据库,为了不让客户访问时看到其它数据库选择,需要把选择数据库的功能隐藏起来。每个客户分配一个域名,用不同的域名来自动关联数据库。
 
在之前openerp7应用中,有人提到了通过修改源码的方式来实现,但实际体验不太好,后来看了odoo8中的代码,实际上系统本身就已经提供了类似的功能。
 
 
 
def db_filter(dbs, httprequest=None):  
    httprequest = httprequest or request.httprequest  
    h = httprequest.environ.get('HTTP_HOST', '').split(':')[0]  
    d, _, r = h.partition('.')  
    if d == "www" and r:  
        d = r.partition('.')[0]  
    r = openerp.tools.config['dbfilter'].replace('%h', h).replace('%d', d)  
    dbs = [i for i in dbs if re.match(r, i)]  
    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端口,主要参数配置如下:
 
 
 
upstream odoo8 {  
server 127.0.0.1:8069;  
}  
  
upstream odoo8-im {  
server 127.0.0.1:8072;  
}  
  
server {  
listen 80;  
server_name _;  
add_header Strict-Transport-Security max-age=2592000;  
  
location / {  
proxy_pass http://odoo8;  
}  
  
location /longpolling {  
proxy_pass http://odoo8-im;  
}  
  
location /web/static/ {  
proxy_cache_valid 200 60m;  
proxy_buffering on;  
expires 864000;  
proxy_pass http://odoo8;  
}  
}  
 
这里可以看出来,因为用了nginx进行反向代理,在转到8069端口时使用了http://odoo8,所以odoo中取得的域名变成了odoo8,这个问题怎么办?想了想看能不能在nginx方面调整配置,将客户端的域名传导到odoo中,看来我们遇到的问题nginx都已经帮我们想到了,通过查询相关资料,将nginx参数调整为如下内容:
 
 
 
 
upstream odoo8 {  
server 127.0.0.1:8069;  
}  
  
upstream odoo8-im {  
server 127.0.0.1:8072;  
}  
  
server {  
listen 80;  
server_name _;  
add_header Strict-Transport-Security max-age=2592000;  
  
location / {  
proxy_set_header Host $http_host;  
proxy_set_header X-Forward-For $remote_addr;  
proxy_set_header X-Real-IP $remote_addr;  
proxy_pass http://odoo8;  
}  
  
location /longpolling {  
proxy_set_header Host $http_host;  
proxy_set_header X-Forward-For $remote_addr;  
proxy_set_header X-Real-IP $remote_addr;  
proxy_pass http://odoo8-im;  
}  
  
location /web/static/ {  
proxy_set_header Host $http_host;  
proxy_set_header X-Forward-For $remote_addr;  
proxy_set_header X-Real-IP $remote_addr;  
proxy_cache_valid 200 60m;  
proxy_buffering on;  
expires 864000;  
proxy_pass http://odoo8;  
}  
}  
 
增加了proxy_set_header的设置,重新启动nginx,在浏览器输入http://db1.xxx.cn,odoo就进入了db1数据库,输入http://db2.xxx.cn,系统就进入了db2。
 
 
现在终于可以愉快滴跟odoo玩耍了。
相关实践学习
基于函数计算快速搭建Hexo博客系统
本场景介绍如何使用阿里云函数计算服务命令行工具快速搭建一个Hexo博客。
相关文章
|
JSON Linux 网络安全
一文搞定:whois数据库查询域名信息(WHOIS)
一文搞定:whois数据库查询域名信息(WHOIS)
1623 0
一文搞定:whois数据库查询域名信息(WHOIS)
|
网络协议 NoSQL 关系型数据库
【宝塔部署PHP项目】含域名访问部署、IP访问部署、数据库、端口号、Nginx等知识
【宝塔部署PHP项目】含域名访问部署、IP访问部署、数据库、端口号、Nginx等知识
1972 0
【宝塔部署PHP项目】含域名访问部署、IP访问部署、数据库、端口号、Nginx等知识
|
6月前
|
弹性计算 安全 数据库
阿里云优惠活动大全_云服务器_云数据库_域名优惠汇总
阿里云优惠活动大全_云服务器_云数据库_域名优惠汇总,云服务器108元一年起,多配置优惠活动
|
网络协议 NoSQL Java
【宝塔部署SpringBoot前后端不分离项目】含域名访问部署、数据库、反向代理、Nginx等配置
【宝塔部署SpringBoot前后端不分离项目】含域名访问部署、数据库、反向代理、Nginx等配置
1189 0
【宝塔部署SpringBoot前后端不分离项目】含域名访问部署、数据库、反向代理、Nginx等配置
|
Oracle Java 关系型数据库
阿里云服务器选择配置以及域名申请和绑定IP搭建教程
阿里云服务器选择以及域名申请和绑定IP搭建教程
6533 0
阿里云服务器选择配置以及域名申请和绑定IP搭建教程
|
搜索推荐 SEO
如何从SEO的角度选择好的域名
学习了如何选择好的域名,那么今天,我们要从SEO的角度来分析域名。 如何从SEO的角度选择好的域名 如果要优化的关键词带有英文,则域名中要包含关键词。
162 0
|
域名解析 弹性计算 网络协议
阿里云SSL证书申请域名验证选择及操作流程
阿里云SSL证书申请需要进行域名验证,SSL证书域名验证方式可选自动DNS验证、手工DNS验证和文件验证,云集市场网分享SSL证书域名验证详解及操作流程
4431 0
阿里云SSL证书申请域名验证选择及操作流程
|
弹性计算 Oracle Java
阿里云服务器配置选择以及域名申请和绑定IP搭建教程
阿里云服务器配置选择以及域名申请和绑定IP搭建教程
阿里云服务器配置选择以及域名申请和绑定IP搭建教程

热门文章

最新文章