Odoo 16通过Nginx代理时LiveChat异常问题求助
问题:Odoo 16 LiveChat在Nginx域名代理下无法实时显示对话
服务器环境:Python 3.8 / Odoo 16 / Nginx,通过域名访问服务。Odoo 16运行在8069端口,gevent端口8072,启动无报错,所有模块运行正常。
症状:通过服务器IP访问时LiveChat功能正常;通过域名访问时,LiveChat仅在右上角通知图标中显示,无法在聊天列表UI实时展示,需刷新页面才会出现。已使用官方推荐Nginx配置,需解决该问题使LiveChat实时正常工作。
1. 当前Nginx配置
#odoo server upstream odoo { server ***.com:8069; } upstream odoochat { server ***.com:8072; } map $http_upgrade $connection_upgrade { default upgrade; '' close; } # http -> https server { listen 80; server_name ***.com; rewrite ^(.*) https://$host$1 permanent; } server { listen 443 ssl; server_name ***.com; proxy_read_timeout 720s; proxy_connect_timeout 720s; proxy_send_timeout 720s; # SSL parameters ssl_certificate /etc/letsencrypt/live/***.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/***.com/privkey.pem; ssl_session_timeout 30m; ssl_protocols TLSv1.2; ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384; ssl_prefer_server_ciphers off; # log access_log /var/log/nginx/odoo.access.log; error_log /var/log/nginx/odoo.error.log; # Redirect websocket requests to odoo gevent port location /websocket { proxy_pass http://odoochat; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection $connection_upgrade; 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; } # Redirect requests to odoo backend server location / { # 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_redirect off; proxy_pass http://odoo; } # common gzip gzip_types text/css text/scss text/plain text/xml application/xml application/json application/javascript; gzip on; }
2. 当前Odoo配置
[options] addons_path = /home/odoo/odoo16/odoo/addons admin_passwd = $pbkdf2-sha512$25000$FiLEeC/l3HtPiXGuFWLMmQ$TQNFHyiDvf9GmR5s6OFOlCr9L1EJ6.5immyQG3zmqzyXRB38ZswJkqa7.N.yKu.hvx67OUUi9YTvJBmzG075xA csv_internal_sep = , data_dir = /home/odoo/.local/share/Odoo db_host = False db_maxconn = 64 db_name = anydb db_password = False db_port = False db_sslmode = prefer db_template = template0 db_user = False dbfilter = demo = {} email_from = False from_filter = False geoip_database = /usr/share/GeoIP/GeoLite2-City.mmdb gevent_port = 8072 http_enable = True http_interface = http_port = 8069 import_partial = limit_memory_hard = 2684354560 limit_memory_soft = 2147483648 limit_request = 65536 limit_time_cpu = 60 limit_time_real = 120 limit_time_real_cron = -1 list_db = True log_db = False log_db_level = warning log_handler = :INFO log_level = info logfile = max_cron_threads = 2 osv_memory_age_limit = False osv_memory_count_limit = 0 pg_path = pidfile = proxy_mode = True reportgz = False screencasts = screenshots = /tmp/odoo_tests server_wide_modules = base,web smtp_password = False smtp_port = 25 smtp_server = localhost smtp_ssl = False smtp_ssl_certificate_filename = False smtp_ssl_private_key_filename = False smtp_user = False syslog = False test_enable = False test_file = test_tags = None transient_age_limit = 1.0 translate_modules = ['all'] unaccent = False upgrade_path = websocket_keep_alive_timeout = 600 websocket_rate_limit_burst = 10 websocket_rate_limit_delay = 0.2 without_demo = True workers = 0 x_sendfile = False
解决方案
1. 排查WebSocket连接状态
打开浏览器开发者工具(F12),切换到Network标签,过滤ws类型请求:
- 访问域名后,确认是否存在
wss://你的域名/websocket连接,状态是否为101 Switching Protocols - 若连接失败或未建立,说明Nginx的WebSocket代理配置存在问题
2. 调整Nginx配置
优化WebSocket上游地址
当前upstream odoochat使用域名指向8072端口,可能存在DNS解析或端口暴露问题,建议直接使用服务器本地IP(如127.0.0.1):
upstream odoochat { server 127.0.0.1:8072; }
完善WebSocket代理参数
在location /websocket块中添加HTTP/1.1协议声明,确保WebSocket握手正常:
location /websocket { proxy_pass http://odoochat; proxy_http_version 1.1; # 添加此行 proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection $connection_upgrade; 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; }
3. 确认Odoo代理模式与请求头
Odoo已开启proxy_mode = True,需确保Nginx传递的X-Forwarded-Proto为https,避免Odoo生成ws://协议的WebSocket链接导致混合内容错误。
4. 清除浏览器缓存
域名访问时,浏览器可能缓存旧的WebSocket连接地址,按Ctrl+Shift+R强制刷新页面后重新测试。
5. 检查防火墙/安全组
确保服务器的8072端口仅允许本地Nginx访问(无需暴露到公网),同时公网443端口已开放,保证WebSocket请求能通过Nginx正常转发。
内容的提问来源于stack exchange,提问作者frankdavid888hotmailcom
相关产品推荐
相关产品推荐

