拓扑图
从上图可以看到, 其实如果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(domain)