Skip to Content

Voice and video calls from the Odoo mobile app: the reverse-proxy setup

The one server requirement XProERP has, and the nginx lines that satisfy it
November 4, 2026 by
Voice and video calls from the Odoo mobile app: the reverse-proxy setup
Xsquare

XProERP installs nothing on your server. The only thing it needs beyond a reachable HTTPS address is what the browser needs for the same features: Odoo’s live connection, served on the /websocket path by the gevent process, must pass through your reverse proxy. Without it, chat still works by polling, but voice and video calls do not connect.

The nginx block

Odoo runs two HTTP ports: the main one (8069 by default) and the longpolling or gevent one (8072). The /websocket path must go to the second port with the upgrade headers. This is the minimal configuration inside your HTTPS server block:

map $http_upgrade $connection_upgrade {
  default upgrade;
  ""      close;
}

upstream odoo      { server 127.0.0.1:8069; }
upstream odoochat  { server 127.0.0.1:8072; }

server {
  listen 443 ssl http2;
  server_name odoo.example.com;

  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;
  }

  location / {
    proxy_pass http://odoo;
    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;
  }
}

In odoo.conf, set proxy_mode = True and make sure workers is greater than zero, because the gevent process only exists in multi-process mode. Docker images and hosting panels usually expose both ports already; check with your provider which port is the gevent one.

How to test it

  • From a terminal: curl -i -N -H "Connection: Upgrade" -H "Upgrade: websocket" -H "Sec-WebSocket-Version: 13" -H "Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==" https://odoo.example.com/websocket should answer 101 Switching Protocols, or at least not 404 or 502.
  • In the browser web client, open Discuss and watch the network tab: a websocket connection to /websocket must stay open.
  • In XProERP, open Discuss and start a call with a colleague who is in the browser; the call connects within a few seconds.

Common mistakes

  • The /websocket location points at the main port instead of the gevent port: chat polls, calls fail.
  • Cloudflare or another CDN in front of the server with websockets disabled: enable them in the network settings.
  • A corporate firewall that strips the Upgrade header: calls work on 4G but not on the office Wi-Fi.
  • No STUN or TURN server configured in Odoo: calls between two phones behind strict NAT may not connect; set the ICE servers in Discuss settings or let the app use Google’s public STUN servers.

If you would rather not touch your proxy, XSquare’s support plans include this setup. Everything else in XProERP works without it.

Odoo 19 on Android and iOS: what works in XProERP
A walk through the views, the chatter, Discuss and the Point of Sale on a current Odoo Community database