基于Nginx location下Odoo12(伪)读写分离 (二)

拓扑图

请求关系
从上图可以看到, 其实如果Nginx不代理某些静态文件的话, Nginx可以独立出主服务器, 但是专业的事情还是让专业的人来做, 各模块static目录下的js, css, xml 文件, /web/content/.*\.(js|css), 就还是让Nginx来处理吧. 一些用户上传的附件, 还是由Odoo处理

Nginx 配置

upstream odoo-main {
    server 127.0.0.1:8469;  # 主库
}
upstream odoo-read {
    server 127.0.0.1:8569;  # 读从库
}
upstream odoo-longpolling {
    server 127.0.0.1:8472;
}

server {
    listen 80;
    server_name  odoo12.jz10.com;		# 随意配置一个域名, 自己在hosts文件里面添加
    access_log   /var/log/nginx/odoo12/access_odoo12.log;
    error_log    /var/log/nginx/odoo12/error_odoo12.log;

    # Add Headers for odoo proxy mode
    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;
    proxy_connect_timeout 720s;
    proxy_read_timeout 720s;
    proxy_send_timeout 720s;
	
    location /longpolling/poll {
        proxy_pass  http://odoo-longpolling;
    }

    # 只读的请求
    location /web/dataset/search_read {
        proxy_pass  http://odoo-read;
    }
    location ~ /web/dataset/call_kw/[^/]+/(load_views|read|fields_get|name_search|name_get) {
        proxy_pass  http://odoo-read;
    }

    # 静态文件分离
    location ~ ^/web/content/.*\.(js|css)$ {
        expires 7d;
        root /data/Odoo-12;		# 指向odoo配置文件中的 $(data_dir)
    }
    location ~ ^/[^/]+/static/.*\.(less|scss)\.css$ {
        expires 7d;
        root /data/Odoo-12/less_css;
    }
    location ~ ^/[^/]+/static/ {
        expires 7d;
        root /data/Odoo-12/addons_static;
    }
	
	# 其他Odoo请求
    location / {
        proxy_redirect  off;
        proxy_pass  http://odoo-main;
    }
    
	# common gzip
 	gzip_types text/css text/scss text/plain text/xml application/xml application/json application/javascript;
 	gzip on;
}

简单粗暴, 分离了特定的静态文件请求和只读请求.

  • ^/web/content/.*\.(js|css)$ 主要是odoo将各模块js|css文件压缩之后产生的web.assets_bankend.js|css等, 主要是进入http://odoo12.jz10.com/web之后会请求一次
  • ^/[^/]+/static/.*\.(less|scss)\.css$ 这个是个模块static目录下的scss|less文件, 原本文件路径是web/static/src/scss/banner.scss, 但是访问的url会变成/web/static/src/scss/banner.scss.css, 这种主要是http://odoo12.jz10.com/web?debug=assets会请求这类url
  • ~ ^/[^/]+/static/ 这个就是完全代理各模块的static目录下的各种文件了

这些静态文件都改为了Nginx代理, 也就是说不需要登录就能访问这些文件, 但是这类静态文件登不登陆又有什么关系捏.

静态文件分离1

如果不想分离静态文件, 觉得这个东西可有可无, 这一块是可以不用参考的, 只需在Nginx配置中注释掉静态文件相关的location, 那样这些文件请求自然会被odoo-main处理.
静态文件魔改较多, 无法通过模块的方式进行扩展, 只能改源码了

# odoo/addons/base/models/assetsbundle.py
from odoo.tools import config	# 添加


class AssetsBundle(object):
	# ....
	def clean_attachments(self, type):
		# ---
		# 一堆代码
		# ---
		# force bundle invalidation on other workers
        self.env['ir.qweb'].clear_caches()
        ats = ira.sudo().search
  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值