目录
问题背景:
nginx相关已配置,odoo14版本
具体问题:
F12 查看longpolling/poll请求失败
nginx日志报错如下
2022/12/23 10:29:12 [error] 21334#21334: *24646 connect() failed (111: Connection refused) while connecting to upstream, client: 此处是地址, server: 此处是地址, request: "POST /longpolling/poll HTTP/1.1", upstream: "http://127.0.0.1:8072/longpolling/poll", host: "此处是地址:8069", referrer: "http://47.97.219.8:8069/web",up stream
问题排查:
多线程断口没起来原因有很多,从以下几个方面排查
1.odoo.conf配置文件多线程配置
- longpolling_port = 8072 # 多线程端口号
- workers = 2 # workers配置需大于0具体配多少需要根据服务器配置计算得出
- proxy_mode = True # 是否使用反向代理模式(这个好像影响不大,保险起见建议配上)
- 修改后记得重启odoo服务
2.nginx配置文件,参考以下:
一般路径我会配在 /etc/nginx/sites-enabled 文件命名odoo.conf
server{
listen 8069; #监听80端口,可以改成其他端口外网9090
server_name ip地址 ; # 当前服务的域名
location ~* WW_verify_pUadGv6Xh3qTtBJF\.txt {
root /opt;
}
location / { #添加访问目录为/apis的代理配置
proxy_pass http://127.0.0.1:8068; # odoo配置文件http断口
proxy_redirect off;
#proxy_set_header Host $host;
proxy_set_header Host $host:$server_port;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
location /longpolling {
proxy_pass http://127.0.0.1:8072/longpolling; # odoo配置文件多线程端口
proxy_connect_timeout 3600s;
proxy_read_timeout 3600s;
proxy_send_timeout 3600s;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
记得检查nginx.conf文件是否加载了/etc/nginx/sites-enabled
具体目标行内容: include /etc/nginx/sites-enabled/*;
若之前没配好注释掉了需要打开注释。
修改后记得重启nginx服务
3.检查防火墙多线程端口8072是否开启
查看端口状态: sudo ufw -i:8072(若没有开启则无返回内容)
没有开启执行以下操作
1. 查看本地端口开启情况
sudo ufw status
开启防火墙的状态下,只有系统允许的端口才能被其他主机访问。
2. 关闭防火墙
sudo ufw disable
防火墙在系统启动时自动禁用
sudo ufw status
状态:不活动
3. 开启防火墙,允许访问特定端口
sudo ufw enable
在系统启动时启用和激活防火墙
udo ufw allow 81
规则已添加
规则已添加 (v6)sudo ufw status
状态: 激活
4. 不允许访问特定端口
sudo ufw deny 81规则已更新
规则已更新 (v6)
sudo ufw status
状态: 激活
至 动作 来自
- -- --
80 ALLOW Anywhere
8001 ALLOW Anywhere
81 DENY Anywhere
80 (v6) ALLOW Anywhere (v6)
8001 (v6) ALLOW Anywhere (v6)
81 (v6) DENY Anywhere (v6)
5.简单开启/禁用
sudo ufw allow|deny [service]
sudo ufw allow smtp #允许所有的外部IP访问本机的25/tcp端口(smtp)
sudo ufw deny smtp #禁止外部访问smtp服务
sudo ufw allow 22/tcp #允许所有的外部IP访问本机的22/tcp端口(ssh)
sudo ufw allow 53 #允许外部访问53端口(tcp/udp)
sudo ufw allow from 192.168.1.100 #允许此IP访问所有的本机端口
sudo ufw allow proto tcp from 192.168.1.30 to 192.1681.5 port 65000 #允许从192.168.1.30到192.1681.5的SSH连接删除规则
sudo ufw delete [rule]
sudo ufw delete allow smtp #删除某条规则
4.经历以上若刷新后longpolling仍然有问题
前台访问刷新,执行查看端口监听命令
lsof -i:8072
可以看到nginx那边是没问题的,那问题就是出在odoo这边,结合这里我们知道是odoo的8072没起来,这个也和nginx的错误日志对上了,nginx接收8072进行转发,但是找不到odoo的8072,后只能找的http的端口8069。
我们去查看odoo运行状态
sudo systemctl status odoo-server.service
日志若到gevent这出错,大家有兴趣可以了解一下这个给类.
gevent服务的功能:监听一个longpolling_port端口,实现longpolling长连接
安装指定包版本重启后就没有longpolling问题了
pip3 install psutil===5.9.4
后续
造成连接断开的问题有很多具体原因具体分析
经过询问其他大佬遇到的问题还有我自己碰到的大概有以下:
原因1:磁盘空间不足,内存不足,配置文件错误
可用命令进行排查
# 查看磁盘空间
df -lh
# 查看内存使用
free -lh
原因2:多线程端口没起来,资源配给不足
需要检查多线程配置
检查多线程端口是否开启,ufw -i:多线程端口号
检查nginx配置参数,建议找一个配置成功的参考
odoo配置文件,检查多线程配置参数(找一个配置成功的参考或百度最优配置)