Jitsi multi-region deployment with region-based bridge selection

Region-based bridge selection lets one self-hosted Jitsi deployment place participants on videobridges near them, using region settings in Jicofo, bridges and Prosody plus an ingress header. This page covers what the handbook documents, how to configure it, and what to confirm first.

On this page

Why a Jitsi multi-region deployment needs region-based bridge selection

An organization that hosts Jitsi for users in several countries or cloud regions needs region-based bridge selection when it wants each participant's audio and video handled close to where that person is, without running a separate Jitsi installation for every area. Region-based bridge selection is the Jitsi mechanism that places each participant on a videobridge in their own region from one deployment. Without it, a single deployment has no basis for choosing a nearby bridge, and teams that need local media paths usually end up operating several independent deployments with separate rooms, accounts and settings to manage.

The feature works by giving each part of the system a region label. Jicofo, the conference focus, uses the RegionBasedBridgeSelectionStrategy and reads its own region from jicofo.local-region. Each videobridge declares its region through videobridge.relay.region. On the XMPP side, Prosody is configured with a region_name and the jiconop, muc_meeting_id and jitsi_session modules. An ingress in front of the deployment adds an X-Proxy-Region HTTP header, and Prosody copies that value into participant presence so Jicofo knows where each participant connected from. Jicofo then assigns the participant to a bridge in the matching region, and bridges in different regions exchange media through relay connections.

A single-region install is enough when all participants sit in one cloud region or one geographic area, latency between them and the bridge is acceptable, and no rule requires media to stay in a particular place. Adding more bridges in one region is horizontal scaling, which is a separate decision from region selection. Before you commit to the multi-region pattern, collect where your users join from, which regions they must reach with acceptable quality, and whether any data residency requirement applies to media or to the servers that route it. Confirm these answers with your network and compliance owners before design work starts.

The Jitsi handbook documents region-based setup as a configuration pattern, and it rests on assumptions outside Jitsi itself. It assumes DNS routing from your cloud provider so that users reach the right regional entry point, and an ingress that sets the X-Proxy-Region header on each request. If your DNS, load balancer or reverse proxy cannot route by region or cannot add that header, participants will not be placed by region as described. Check these assumptions in a proof of concept with test users in two regions, and confirm the exact settings against the handbook version you plan to deploy.

Region settings and routing options and when each fits

This table lists each region setting in a Jitsi multi-region deployment, what it controls, where it is configured and when to set it. Read it top to bottom to follow the path from DNS entry point to bridge placement. The main takeaway is that every component must carry the same region names, or bridge selection will not behave as planned.

SettingWhat it sets and where it is configuredWhen to use it or keep the default
RegionBasedBridgeSelectionStrategy in JicofoSets the bridge selection strategy Jicofo uses when it places a participant. Configured in the Jicofo configuration file.Enable when users in several regions should land on bridges near them. Keep the default strategy for a single-region deployment.
jicofo.local-regionNames the region that this Jicofo instance belongs to. Set in the Jicofo configuration file.Set on every Jicofo so it can prefer bridges in its own region. Confirm the handbook's default behavior when it is unset.
videobridge.relay.region on each bridgeDeclares the region of one videobridge. Set in each bridge's configuration file.Set on every bridge in every region. Confirm in the handbook how a bridge without a region value is handled.
jiconop, muc_meeting_id and jitsi_session Prosody modules with region_nameEnables these Prosody modules and sets the region name they report. Configured in the Prosody configuration for each host.Enable them with region-based selection, as the handbook's region setup lists. Leave them out only in a single-region deployment.
X-Proxy-Region header from ingressHTTP header added at the ingress, which Prosody adds to participant presence for Jicofo. Configured in the reverse proxy or load balancer.Use when a regional entry point must tell Jitsi where the user is. Confirm your ingress can add and pass the header.
DNS routing from the cloud providerSends each user to a regional ingress by name. Configured in the cloud provider's DNS service, outside Jitsi.Use when users should reach a nearby entry point automatically. Confirm the provider's routing and health-check options before you rely on them.
Region names across componentsThe same region value must match in Jicofo, every bridge, Prosody and the ingress mapping. Set in each component's own configuration.Always. Spelling or case differences are easy to introduce and can be hard to spot in logs, so check every component before go-live.

How Jicofo picks a bridge from the participant's region

Jicofo chooses a bridge by comparing two regions: the region it has learned for a participant and the region it is configured to treat as its own. With region-based bridge selection enabled, Jicofo prefers a videobridge in the participant's region, so the media for a meeting starts close to the people in it. The decision depends on four steps working in order. A fault in any one of them may not produce an error message. It is more likely to show up as a meeting placed on a bridge far from its participants, so the sequence is worth understanding before anything goes live.

The first two steps happen at the edge and in the signaling layer. The ingress in front of Jitsi adds an X-Proxy-Region HTTP header to requests, and Prosody copies that region into each participant's presence so that Jicofo can read it. Your ingress is usually a cloud load balancer or reverse proxy that you configure yourself, and the handbook assumes DNS routes users to a regional entry point. Confirm that the header reaches Prosody on the signaling path you actually use, and that the jiconop, muc_meeting_id and jitsi_session modules carry region_name in your Prosody configuration. A test client joining from each region, with a look at the presence it receives, is the simplest check.

The third step is the comparison. Jicofo uses jicofo.local-region to identify the region it serves, and each bridge sets videobridge.relay.region to its own region. When a participant's region matches a bridge's region, Jicofo places the conference on that bridge. The fourth step covers the case where the nearest region has no suitable bridge available. Conference media can then be relayed between bridges in different regions. The exact relay and fallback behavior depends on the Jitsi release you run, so confirm it against the region-based setup section of the handbook and test that scenario in staging before you rely on it for users in a specific country or office.

Capacity follows the same logic. The scalable setup guide says videobridges scale horizontally by adding more of them, and the default install is already configured for that. Each region needs enough bridges for its expected load. Check the sizing guidance in that guide against your own meeting profile, and ask your team or partner to document the expected load per region before go-live. Region names, relay settings and Prosody modules must match across every bridge and central server, which is why the guide recommends configuration management tools such as Ansible or Puppet. Keep region settings in version-controlled templates so that a new bridge in one region cannot quietly start with the wrong label.

Configuring a Jitsi multi-region deployment step by step

This sequence takes a working single-region Jitsi Meet deployment and adds region awareness, so Jicofo can prefer bridges in each user's region. Each step ends with a check you can run before moving on. Work through the steps in order, because later steps depend on the region values set earlier.

  1. Confirm the base deployment works in one region

    Confirm that the web server, Prosody, Jicofo and at least one Videobridge run and serve conferences before you add any region settings. Serve the site over HTTPS with a certificate issued for your domain, since the Jitsi handbook says self-signed certificates cause problems for audio and video, especially on mobile clients. Check that the required ports are open and that a test conference carries audio and video between two browsers. Region settings added to a broken base are hard to diagnose, so do not move on until this test passes.

  2. Set the local region in Jicofo

    Set jicofo.local-region in the Jicofo configuration to the name of the region that Jicofo serves. Use a short, lowercase name and keep the exact same string everywhere a region is set in later steps, because Jicofo compares these values to decide which bridge is local. Record all region names in one table owned by the platform team so that bridges, Prosody and the ingress use identical values. Restart Jicofo and confirm in its logs that it starts with the region you set. If your design runs more than one Jicofo, confirm which region each one serves before going further.

  3. Enable the region-based bridge selection strategy

    In the Jicofo configuration, select RegionBasedBridgeSelectionStrategy as the bridge selection strategy. This setting makes Jicofo choose bridges using region information in place of the default selection. Apply it on the same Jicofo that holds the local region from the previous step, then restart the service. Check the Jicofo logs after a test conference to confirm the strategy is in use and that the conference is placed on a bridge. Confirm the exact property name and its behavior against the Jitsi handbook for your installed version before you roll it out.

  4. Set the relay region on each videobridge

    On every Videobridge, set videobridge.relay.region to the region where that bridge runs, using the same names you set in Jicofo. Do this on each bridge individually, because a bridge with a missing or mismatched value cannot be matched to participants in its region. For any bridge in a region with no matching Jicofo value, decide whether it should be used at all before you add it to the pool. Check by listing every bridge with its region value and comparing the list to the region table from the second step. Restart each bridge after the change and confirm that it registers with Jicofo.

  5. Enable and configure the Prosody region modules

    Enable the jiconop, muc_meeting_id and jitsi_session modules on the Prosody virtual host that serves conferences, and set region_name in the Prosody configuration to the region that instance serves. These modules carry region information through the signaling path so that Jicofo can read it. If you run Prosody in more than one region, each instance needs its own region_name that matches its ingress. Reload Prosody and confirm in its log that the modules load without errors. Join a conference from a test client and inspect the presence data to confirm it includes the region value before you continue.

  6. Add the X-Proxy-Region header at the ingress

    Configure the ingress or load balancer in each region to add an X-Proxy-Region HTTP header to requests it forwards to Prosody, with the value set to that region's name. Prosody reads this header and adds the region to participant presence, which is how Jicofo learns where a user connects from. Use the ingress product your team already operates, and confirm in its documentation how it sets custom request headers. Strip any client-supplied value of this header at the edge so that only your ingress sets it. Check by sending a test request through each ingress and confirming the header reaches Prosody with the expected region.

  7. Set up DNS routing to regional ingress

    Create DNS records so that users resolve to the ingress that matches their location, using the routing features of your cloud provider. The Jitsi handbook assumes DNS routing from a cloud provider for this design, so confirm which routing policies your provider offers and how they are billed before you commit. Keep one public hostname for all regions so users do not see different URLs. Check by resolving the hostname from test locations in each region and confirming each one returns the expected ingress address. Record the results, because a DNS mistake can look like a bridge selection problem later.

  8. Test bridge selection from each region

    Run a test conference from a client in each region and confirm that participants are placed on a bridge whose relay region matches their own. Repeat the test with a second participant from a different region to confirm that cross-region calls work and that media flows through the bridges you expect. Use the Jicofo and bridge logs to match each conference to a bridge and its region value, and record the results against the region table. In a non-production environment, take one regional bridge out of the pool and confirm that Jicofo behaves as your design expects. Move to production only after every region passes.

Security and operations for bridges spread across regions

Each regional bridge adds a system to patch, monitor and back up, and the region routing depends on headers that only trusted infrastructure may set. The cards below cover the operational load, the sizing reference points from the scalable guide, the media protection the bridges provide, and the trust boundary at the ingress.

Operational load per bridge

Every videobridge you add is another server with its own operating system updates, Jitsi package upgrades, monitoring and configuration backups. The Jitsi scalable setup guide warns that building scalable infrastructure is not a task for beginning administrators and recommends configuration management tools such as Ansible or Puppet. Ask who owns each bridge's configuration, and confirm that every regional bridge is described by the same playbook or manifest.

Central server sizing reference

The Jitsi scalable setup guide suggests a 4 CPU, 8 GB machine for the central server, which runs Prosody and Jicofo for the whole deployment. Treat this as a starting reference rather than a capacity plan for your user count. Confirm the central server's placement and its own monitoring, because a regional outage in the central components affects routing for every region.

Videobridge sizing reference

The same guide suggests 4 or 8 CPU with 8 GB RAM for each videobridge. Bridges in different regions often differ in traffic, so size each one against the participants it will carry, not against a uniform template. Load test each region before cutover, and record the figures you measured so later capacity changes start from evidence.

Media protection on the bridge

Jitsi Meet encrypts audio and video on the network with DTLS-SRTP, according to the Jitsi security page. The videobridge decrypts packets in memory while routing them and does not store them. Your regional bridges therefore hold media in memory in each region, so confirm where those hosts run, who can reach them, and that your data residency rules accept processing in each location.

Trusted ingress for region headers

Region selection depends on an X-Proxy-Region header that the ingress adds and Prosody passes to Jicofo in participant presence. If a client can set that header itself, it can influence which bridge it is placed on. Configure the ingress to overwrite or strip any inbound copy of the header, and restrict the systems that can reach Prosody directly so that only trusted infrastructure sets it.

Verification of region routing

After setup, test from a client in each region and confirm which bridge it joins and that the region value on the bridge matches the intended region. Repeat the test after any ingress, DNS or bridge change. Keep the test results with your change records, because they show the routing you approved rather than the configuration you believe you deployed.

What your ingress and DNS must provide for region routing

The handbook's region design assumes two things from your edge. The first is DNS routing from a cloud provider, so each user reaches an entry point in a sensible region. The second is an ingress that adds an X-Proxy-Region HTTP header to requests. Prosody adds that value to participant presence, and Jicofo reads it when it selects a bridge. If either piece is missing, bridge selection cannot be region-aware and users fall back to whatever default your Jicofo settings produce. Before you commit to the design, confirm that your DNS provider can answer with a different regional name or address for each region, and confirm which ingress products in your environment can set a custom header from a region value you derive.

If your platform differs from the handbook's assumption, you must build or confirm the equivalent. A cloud load balancer may insert headers from a per-region listener or a rule keyed on the region. A self-managed reverse proxy can set headers from configuration, but the region value must come from a source you control. A CDN in front of the platform may supply its own geographic header, and you must map that header to X-Proxy-Region exactly. On-premises DNS often lacks latency or geographic answers, so you may need a global load balancing appliance or a split by network segment. Confirm each option with the product vendor and test it with your own traffic.

A client can send an X-Proxy-Region header itself. Unless the edge removes any inbound copy of that header, a user could force a bridge in another region, which adds latency and may move media across a boundary your data residency policy forbids. Set the header only at the edge, strip inbound copies on every listener, including listeners you consider internal, and verify with a request carrying a forged value that the backend sees only the edge value. Also restrict direct access to Prosody's BOSH and WebSocket endpoints so that traffic cannot skip the proxy and its header handling.

Some users will arrive without a usable region. Causes include networks missing from the geographic data, VPN exit points, mobile carriers, and ingress failures. Decide in writing which bridge pool serves these users, whether they go to a home region, and whether an unrecognized value is treated the same as a missing one. Test each path: a request with no header, a request with an unrecognized value, and a request during a failover. Log the region value for each join so unknown rates are visible over time. Ask the handbook's maintainers or your own test results how Jicofo handles a participant with no region value in your version, because that behavior decides whether users are placed on a bridge or fail to join.

Limits to confirm before you commit to multi-region

Region-based bridge selection depends on settings that differ by release, network path and certificate setup. The cards below list what your team should confirm in its own environment before committing, and DeployOpen confirms each one against the written scope rather than assuming it.

Release behavior against the handbook

Confirm the Jitsi release you plan to run and check that its region behavior matches the region-based setup in the Jitsi handbook. Settings for Jicofo, bridges and Prosody must be verified against that exact release, not against documentation written for another version. Record the build number you test so later upgrades can be compared against it.

Region naming scheme

Region names must match exactly across Jicofo, each videobridge and the ingress header, because a mismatch sends participants to the wrong bridge or to none. Agree on one naming convention before any configuration is written and document it. Check that the cloud DNS routing you use produces the same region values the ingress adds.

Cross-region latency and relay paths

Bridges in different regions relay media to each other, so the network path between them determines call quality. Measure latency and packet loss between every region pair you plan to use, and confirm which paths your provider routes over. Test with real participants on the links your users will use, including mobile networks and VPNs.

Firewall rules for 10000/UDP on every bridge

Each videobridge must accept media traffic on 10000/UDP from clients and from other bridges. The quick start also lists 443/TCP for TCP fallback and 3478/UDP for STUN as optional, so decide whether you need them in each region. Confirm the rules on every bridge, not only the first one, and verify them with a test call through each region.

Certificate coverage for each entry point

The handbook states that HTTPS with a proper domain certificate is necessary for working audio and video, and that self-signed certificates cause problems, especially on mobile clients. Confirm that every regional entry point hostname is covered by a trusted certificate and that renewal works in each region. Check the mobile clients your users run against the certificate chain you issue.

Build effort for experienced administrators

The Jitsi scalable setup guide warns that building scalable infrastructure is not a task for beginning Jitsi administrators and recommends configuration management tools such as Ansible or Puppet. Assess whether your team has that experience and tooling for several regions. If it does not, ask DeployOpen to include that build capacity and configuration management in the written scope.

Verifying a Jitsi multi-region deployment before users depend on it

Test region routing before any user relies on it, because a multi-region Jitsi setup can look healthy while every conference quietly lands on one bridge. The first test is a join from a client in each region. Use one test account per region, join a fresh room from each location, and confirm in the Jicofo logs that the conference was placed on the bridge that matches that region. Repeat each join with a second participant from the same region, since the placement you want is for the room, and a second joiner shows whether the bridge choice held. Record the room name, the bridge identifier and the time for each run so a later failure can be compared with a known good result.

Next, check that presence carries the region. The Jitsi handbook describes an ingress that adds an X-Proxy-Region HTTP header and Prosody copying it into participant presence for Jicofo. Confirm that the header is set by your ingress for each test region, that Prosody includes it in presence, and that Jicofo reads it when it chooses a bridge. Confirm the exact element names and log wording against the release documentation for the build you run, because the handbook is the reference for how these pieces connect and the lines you see in your own logs are what you should match against.

Then test the fallback path. Send joins with the header missing, with an unknown region value and with a region that has no bridge assigned. Each case should still produce a working conference on a bridge that you have decided is acceptable, usually a default or the local region. Treat a rejected join or an unexpected cross-region placement as a finding. Decide in advance which behavior is acceptable for users in a region with no bridge, because the answer affects data residency and latency commitments more than it affects the code.

Finally, test failover by stopping one regional bridge during a controlled window and joining from that region again. Watch Jicofo and the remaining bridges for how the conference is placed, and confirm that users reach a working meeting without manual changes. Capture logs from Jicofo and from every bridge for each test, keep them with the test record, and compare them with the expected output in the release notes for your build before signing off.

Questions teams ask before running Jitsi in several regions

How much effort does a multi-region Jitsi deployment take?

Effort depends mostly on four things: how many regions you serve, which ingress and DNS platform routes users to them, how much certificate and firewall work each region needs, and how much testing you run across regions.

Each region adds its own bridge tier, region settings on the videobridges and Prosody, and a path that sends users to the right bridge. The Jitsi handbook assumes DNS routing from your cloud provider and an ingress that adds a region header, so a platform your team does not already operate adds work.

No duration is given here because it depends on your scope. Request a written quote built from your region list, ingress choice and test plan, and agree the scope in writing before work starts.

Can our own engineers build region-based Jitsi bridge selection?

Yes, if your team already has experience with Prosody, Jicofo and networking, and runs a configuration management practice. The Jitsi scalable setup guide recommends tools such as Ansible or Puppet for this kind of infrastructure, and it warns that building a scalable setup is not a task for beginning Jitsi administrators.

The work touches the bridge selection strategy in Jicofo, the local region setting on Jicofo, the relay region on each videobridge, and Prosody modules configured with region names. Teams new to this often find the ingress header and certificate steps are where schedules slip.

A partner makes sense when you want design, build and testing handled under a fixed written scope while your team learns the platform. Either way, plan a staging environment with test calls from each region before production.

What do we need to provide before a multi-region Jitsi engagement starts?

Plan to provide cloud accounts or data center access for each region, network access for servers and firewall changes, the list of regions and the users each one serves, control of the DNS zone that routes users, and a certificate authority or domain certificate process.

The Jitsi handbook states that HTTPS with a proper domain certificate is necessary for working audio and video, and that self-signed certificates cause problems, especially with mobile clients.

Each bridge needs 10000 over UDP open, plus 80 and 443 over TCP. Port 5349 over TCP supports TCP fallback, and port 3478 over UDP for STUN is optional. Confirm which of these your organization controls before the quote is written, because gaps change the scope.

How long does a multi-region Jitsi deployment take?

No duration can be given here because it depends on the number of regions, the ingress and DNS platform, certificate and firewall work, and how much cross-region testing you need. Those inputs also decide whether the work runs as one pass or in stages by region.

DeployOpen works on fixed-scope engagements, and scope, deliverables and timelines are agreed in writing before work starts. To compare options, send your region list, the platform that routes users to regions, your certificate process and your testing expectations.

Ask the written quote to separate design, build, region-by-region testing and handover, so you can see where the time goes and which steps can run alongside your own change windows.

Does our ingress need to send a region header for Jitsi?

Yes. The Jitsi handbook's region design assumes an ingress that adds an X-Proxy-Region HTTP header to requests, which tells Jitsi where the user is. Prosody adds that region to participant presence, and Jicofo uses it when it chooses a bridge.

Confirm that your load balancer, reverse proxy or cloud ingress can set a custom header on requests reaching the Jitsi web tier. The value must match the region names configured on your bridges and Prosody.

Test the header with clients in each region, since a missing or inconsistent value can send users to a distant bridge. Record the header name, where its value comes from, and how your ingress behaves when it cannot set the header, so the runbook covers that case.

What ongoing work follows a multi-region Jitsi go-live?

Three areas recur: patching, bridge scaling and monitoring.

Jitsi Meet stable releases are tagged by build number, so each update needs a plan for every region, including the operating system and Java under it. The Debian and Ubuntu quick start supports Debian 12 (Bookworm) or newer and Ubuntu 24.04 or newer and requires OpenJDK 17, so those baselines need to stay current on each machine.

The scalable setup guide says videobridges scale horizontally by adding more, and it suggests 4 or 8 CPUs with 8 GB of RAM for each videobridge. Capacity reviews should follow actual usage in each region. Monitoring of each bridge and the central server is a standing task.

Ask the quote to say which of these your team will run and which can sit under a retainer.

What does DeployOpen deliver for multi-region Jitsi, and what does it leave to auditors?

DeployOpen plans, implements, customizes, integrates, hardens, backs up, upgrades, documents and supports self-hosted open-source platforms inside your own cloud accounts, data centers or air-gapped networks. For this topic, that covers region design, Jicofo and Prosody settings, bridge configuration, ingress header work, documentation and testing.

Where compliance is part of the goal, DeployOpen prepares systems, controls and evidence for assessment. It does not issue audit reports, attestations or certifications. Independent auditors and certification bodies do that work.

Ongoing support, upgrades and continuous testing are available as retainers. Most engagements are fixed scope, and the written quote sets out what is included before any work starts.

How DeployOpen scopes and delivers a multi-region Jitsi deployment

DeployOpen plans, builds and hands over multi-region Jitsi Meet inside infrastructure you control, with region-based bridge selection designed before any configuration is written. The work covers Jicofo region settings, bridge and Prosody region values, and the ingress header that tells Jitsi where each participant connects from. Each step is agreed in writing before it starts.

How we scope

  • Map which regions need local bridges, which users connect to each, and how DNS routing from your cloud provider sends them there.
  • Define the ingress that adds the X-Proxy-Region header, and confirm which proxy or load balancer in your estate can set it.
  • Agree a written scope listing regions, bridge count per region, Prosody and Jicofo hosts, certificates and acceptance tests before work starts.

How we build

  • Configure Jicofo with the region-based bridge selection strategy and the local region value for each deployment.
  • Set the relay region on every videobridge and enable the region-aware Prosody modules with the matching region name.
  • Test cross-region conference joins, bridge selection and failover behavior in a non-production environment before cutover.

How we hand over

  • Deliver a region map showing each bridge, its region value, its ingress path and the hosts that depend on it.
  • Document the configuration management code, such as Ansible or Puppet roles, used to add or change bridges later.
  • Provide a runbook for adding a region, replacing a bridge and checking that the X-Proxy-Region header reaches Prosody.

How we support

  • Ongoing support, upgrades and continuous testing are available as a retainer that covers region changes and Jitsi version updates.
  • Retainer scope is agreed in writing, including how region-related incidents are triaged and which environments are covered.
  • Confirm with your team how bridge capacity will be monitored and who approves adding a bridge in a new region.

Sources and further reading

Talk to our team.

Tell us what you're working on, whether it's a deployment, an audit, a security test or a cyber range. You'll speak with an engineer who can help you scope it.

  • 30-minute call: free, with no obligation.
  • NDA on request: we can sign before you share details.
  • Clear next steps: a scope and plan after the call.