提要
- 1、上篇讲完用docker部署完odoo后,odoo系统页面加载是非常缓慢,而且经常出现中断、白屏等现象。
- 2、nginx 配置 微信小程序 业务域名 认证 。
- 3、系统环境同上篇:阿里云ubuntu16.04。
- 4、nginx安装在宿主机上。
一、准备资料
- 1、安装nginx
nginx官方tar.gz包连接 (根据需求下载最新的稳定版)
参考csdn博文:LINUX安装nginx详细步骤
- 2、申请ssl证书,并上传到服务器
- 阿里云服务器ssl证书申请教程连接
- 上传证书到服务器目录 /etc/nginx/ssl
$cd /etc/nginx/ssl $rz #选择要上传的ssl文件如:www.xxx.com.key www.xxx.com.pem
- 3、登陆微信公众号平台下载 域名业务 认证文件
二、配置文件
- 1、配置/etc/nginx/nginx.conf 文件:(全局配置)
参考:
简书 > 独木舟的木:Nginx使用及配置
Alan Hou的个人博客:Odoo12开发者指南第三章 服务器部署
CNBLOGS > Bluestorm’s Space:Nginx服务器安装及配置文件详解
CSDN > 起一个好听的名字:nginx.conf配置文件中timeout超时时间设置
$vi /etc/nginx/nginx.conf
# ---内容如下---
##
#全局配置
#
user www-data; # 配置worker进程的用户和组
worker_processes 2; # 配置worker进程启动的数量,建议根据cup核心数
pid /run/nginx.pid; # 配置记录主进程ID的文件
worker_rlimit_nofile 1536; # 配置一个工作进程能够接受并发连接的最大数
##
# 工作模式及连接数上限
#
events {
# 单个后台worker_process进程的最大并发连接数
# 并发总是 max_clients = worker_professes * worker_connetctions
worker_connections 768; # 默认值1024
# multi_accept on; # 指明 worker 进程立刻接受新的连接
# epoll是多路复用IO(I/Omultiplexing)中的一种方式
#仅用于liunx2.6 以上内核,可以大大提高Nginx的性能
use epoll;
}
##
# http模块
#
http {
##
# Basic Settings 基础设置
##
# sendfile 指定 nginx 是否调用 sendfile 函数(zero copy 方式)来输出文件
#对于普通应用,必须设为 on,
#如果用来进行下载等应用磁盘 IO 重负载应用,可设置为 off,
#以平衡磁盘与网络 I/O 处理速度,降低系统的 uptime.
sendfile on;
tcp_nopush on; # buffer累积到一定大小后发送
tcp_nodelay off; # 如打开on:尽快发送数据,启用了buffer,关闭此功能等待buffer再发送
keepalive_timeout 65; # 连接超时时间
types_hash_max_size 2048; # 指定散列型表的最大大小
# server_tokens off;
# http_proxy 设置
client_max_body_size 10m;
client_body_buffer_size 128k;
# 设置proxy转发模块超时设置_t
proxy_read_timeout 60s;
proxy_connect_timeout 60s;
proxy_send_timeout 60s;
# 设置 buffer 缓存功能 建议在server里面设置
# proxy_buffer_size 4k;
# proxy_buffers 4 32k;
# proxy_busy_buffers_size 64k;
# proxy_temp_file_write_size 64k;
# proxy_temp_path /usr/local/nginx/proxy_temp 1 2;
# server_names_hash_bucket_size 64; # this seems to be required for some vhosts
# server_name_in_redirect off;
include /etc/nginx/mime.types; # 设定mine类型
default_type application/octet-stream;
# 设定请求缓冲
client_header_buffer_size 128k; # 指定客户端请求头缓存大小,当请求头大于 1KB 时会用到该项
large_client_header_buffers 4 128k; # 最大数量和最大客户端请求头的大小
##
# SSL Settings
##
# 启用所有协议,禁用已废弃的不安全的SSL 2 和SSL 3
ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # Dropping SSLv3, ref: POODLE
ssl_prefer_server_ciphers on; # 让服务器选择要使用的算法套件
##
# Logging Settings 日志设置
##
access_log /var/log/nginx/access.log; # 访问日志
error_log /var/log/nginx/error.log; # 错误日志
##
# Gzip Settings 压缩静态文件设置
##
gzip on;
gzip_disable "msie6";
gzip_vary on;
gzip_min_length 1k; # 设置允许压缩的页面最小字节数,默认值是20,建议大于1k
# gzip_proxied any;
# gzip_comp_level 6;
gzip_buffers 4 128k;
# gzip_http_version 1.1
gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
##
# Virtual Host Configs 虚拟主机配置
##
include /etc/nginx/conf.d/*.conf; # 这个文件夹默认是空的
include /etc/nginx/sites-enabled/*; # 开启的server服务配置
}
##
# mail模块(暂时不配置)
##
#mail {
# # See sample authentication script at:
# # http://wiki.nginx.org/ImapAuthenticateWithApachePhpScript
#
# # auth_http localhost/auth.php;
# # pop3_capabilities "TOP" "USER";
# # imap_capabilities "IMAP4rev1" "UIDPLUS";
#
# server {
# listen localhost:110;
# protocol pop3;
# proxy on;
# }
#
# server {
# listen localhost:143;
# protocol imap;
# proxy on;
# }
#}
- 2、虚拟服务 odoo服务配置文件:/etc/nginx/sites-available/odoo
提示1: odoo 配置文件不带后缀
提示2: 上传微信 业务域名 认证文件 MP_verify_xxx.txt 到 根目录下,然后配置80端口的location指定到该文件进行认证
提示4: 这里的端口要对应上 odoo容器里面的长轮询poll端口,上篇配置的映射是8071:8071
upstream odoochat {
server 127.0.0.1:8071; # odoo服务长连接映射的宿主机端口
}
$cd /etc/nginx/sites-available/
$vi odoo
# ---内容如下---
##
# 设置上游
##
upstream backend-odoo{
server 127.0.0.1:8069; # odoo服务映射的宿主机端口
}
upstream odoochat {
server 127.0.0.1:8071; # odoo服务长连接映射的宿主机端口
}
##
# http服务
#
server{
listen 80;
server_name wwww.XXX.com; # 你的域名
add_header Strict-Transport-Security max-age=2592000; includeSubDomains; preload; # HSTS HTTP 头部标准
rewrite ^(.*) https://$host$1 permanent; # 转发到https服务
# 下面这个是配置微信 业务域名 认证文件目录
location = /MP_verify_xxx.txt {
root /MP_verify_xxx.txt ;
}
}
server {
listen 443;
server_name www.XXX.com XXX.com;
# 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;
# ssl 配置
ssl on;
ssl_certificate_key /etc/nginx/ssl/www.XXX.com.key; # 配置 key 私钥文件
ssl_certificate /etc/nginx/ssl/www.xxx.com.pem; # 配置 pem 证书文件
ssl_session_timeout 60m; # 设置超时时间60分钟
ssl_protocols TlSv1 TLSv1.1 TlSv1.2; #设置SSL/TSL 协议版本号
ssl_prefer_server_ciphers on; # 控制密码套件优先级,让那个服务器选择要使用的算法套件
ssl_buffer_size 14000; # 减少TLS缓冲区大小,可以显著减少首字节时间(《HTTPS权威指南》P416)
# log
access_log /var/log/nginx/odoo.access.log;
error_log /var/log/nginx/odoo.error.log;
# increase proxy buffer zise
proxy_buffers 4 16k;
proxy_buffer_size 32k;
proxy_busy_buffers_size 64k;
proxy_max_temp_file_size 512m;
# force timeout if the backend dies
# proxy_next_upstream error timeout invalid_header http_500 http_50;
# 配置 启用静态缓存 减轻odoo服务器的负载
location ~* /web/static/ {
#cache static data
proxy_cache_valid 200 60m;
proxy_buffering on;
expires 864000;
proxy_pass http://backend-odoo;
}
# Redirect longpoll requests to odoo longpolling port
# 设置反向代理 odoo 长轮询 端口
location /longpolling {
proxy_pass http://odoochat;
}
# Redirect requests to odoo backend server
# 反向代理 odoo 服务请求 端口
location / {
proxy_redirect off;
proxy_pass http://backend-odoo;
}
# common gzip 压缩静态文件
gzip on;
gzip_types text/css text/scss text/plain text/xml application/xml application/json application/javascript;
}
- 3、提示3:添加 /etc/nginx/sites-enabled/中配置文件的连接,并删除此目录下的default文件:
$ln -s /etc/nginx/sites-available/odoo /etc/nginx/sites-enabled/odoo
$rm /etc/nginx/sites-enabled/default
- 4、检查配置文件,并重启odoo服务和nginx服务
提示3: 如果是根据上篇docker安装的,重启odoo服务如下
# 容器名称为odoo 或者填写容器id
$docker stop odoo
$docker start odoo
$nginx -t
# 如有提示错误,请根据提示位置改正
$sudo service nginx restart