Issue when trying to enable websockets for local jitsi meet install

Hi
Jitsi meet installation on local server was configured on BOSH (and was working fine) but we are trying to switch to using Websockets

I followed the guide in this link

But when I try to connect to my jitsi meet room on my local server with websocket configuration

I see “you have been disconnected” error and it counts down and refreshes the page
The NGINX log looks okay

90.210.142.197 - - [09/Feb/2021:11:07:43 +0000] “GET /mytestroom HTTP/1.1” 200 17912 “mydomain” “Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.146 Safari/537.36”
90.210.142.197 - - [09/Feb/2021:11:07:43 +0000] “GET /images/favicon.ico?v=1 HTTP/1.1” 200 953 “mydomain/mytestroom” “Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.146 Safari/537.36”
90.210.142.197 - - [09/Feb/2021:11:07:43 +0000] “GET /xmpp-websocket?room=mytestroom HTTP/1.1” 403 284 “-” “Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.146 Safari/537.36”
90.210.142.197 - - [09/Feb/2021:11:07:46 +0000] “GET /pwa-worker.js HTTP/1.1” 200 1511 “mydomain/pwa-worker.js” “Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.146 Safari/537.36”

But the log on the browser doesnt

WebSocket connection to ‘wss://mydomain/xmpp-websocket?room=mytestroom’ failed: Error during WebSocket handshake: Unexpected response code: 403
_connect @ strophe.umd.js:5463
connect @ strophe.umd.js:2368
_interceptConnectArgs @ strophe.stream-management.js:228
connect @ XmppConnection.js:248
_connect @ xmpp.js:443
connect @ xmpp.js:515
c.connect @ JitsiConnection.js:61
e @ connection.js:47
(anonymous) @ connection.js:178
d @ connection.js:103
h @ connection.js:208
W @ conference.js:185
createInitialLocalTracksAndConnect @ conference.js:657
init @ conference.js:779
Logger.js:154 2021-02-09T11:11:42.831Z [JitsiMeetJS.js] <Object.getGlobalOnErrorHandler>: UnhandledError: Strophe: Websocket error [object Event] Script: null Line: null Column: null StackTrace: Error: Strophe: Websocket error [object Event]
at Object.r.Strophe.log (mydomain/libs/lib-jitsi-meet.min.js?v=139:17:16531)
at Object.error (mydomain/libs/lib-jitsi-meet.min.js?v=139:1:23431)
at N.Websocket._onError (mydomain/libs/lib-jitsi-meet.min.js?v=139:1:62905)
o @ Logger.js:154
getGlobalOnErrorHandler @ JitsiMeetJS.js:613
window.onerror @ middleware.js:110
callErrorHandler @ GlobalOnErrorHandler.js:61
r.Strophe.log @ strophe.util.js:89
error @ strophe.umd.js:1392
_onError @ strophe.umd.js:5730
error (async)
_connect @ strophe.umd.js:5465
connect @ strophe.umd.js:2368
_interceptConnectArgs @ strophe.stream-management.js:228
connect @ XmppConnection.js:248
_connect @ xmpp.js:443
connect @ xmpp.js:515
c.connect @ JitsiConnection.js:61
e @ connection.js:47
(anonymous) @ connection.js:178
d @ connection.js:103
h @ connection.js:208
W @ conference.js:185
createInitialLocalTracksAndConnect @ conference.js:657
init @ conference.js:779
async function (async)
init @ conference.js:744
(anonymous) @ actions.web.js:31
Promise.then (async)
(anonymous) @ actions.web.js:30
(anonymous) @ index.js:11
(anonymous) @ middleware.js:29
(anonymous) @ middleware.js:32
(anonymous) @ middleware.js:31
(anonymous) @ middleware.web.js:34
(anonymous) @ middleware.any.js:22
(anonymous) @ middleware.js:67
(anonymous) @ middleware.js:43
(anonymous) @ middleware.js:61
(anonymous) @ middleware.js:79
(anonymous) @ middleware.js:71
(anonymous) @ middleware.js:77
(anonymous) @ middleware.js:39
(anonymous) @ middleware.js:106
(anonymous) @ middleware.js:38
(anonymous) @ middleware.js:33
(anonymous) @ middleware.web.js:24
(anonymous) @ middleware.any.js:93
(anonymous) @ middleware.js:77
(anonymous) @ middleware.web.js:21
(anonymous) @ middleware.js:44
(anonymous) @ middleware.js:25
(anonymous) @ middleware.js:16
(anonymous) @ middleware.js:21
(anonymous) @ middleware.js:23
(anonymous) @ middleware.js:21
(anonymous) @ middleware.js:110
(anonymous) @ middleware.js:16
(anonymous) @ middleware.js:36
(anonymous) @ middleware.js:33
(anonymous) @ middleware.js:178
(anonymous) @ middleware.js:39
(anonymous) @ middleware.js:24
(anonymous) @ middleware.js:26
(anonymous) @ middleware.web.js:20
(anonymous) @ middleware.js:42
(anonymous) @ middleware.js:148
(anonymous) @ middleware.js:21
(anonymous) @ middleware.js:60
(anonymous) @ middleware.js:44
(anonymous) @ middleware.js:49
(anonymous) @ middleware.js:28
(anonymous) @ middleware.js:12
(anonymous) @ middleware.js:39
(anonymous) @ middleware.js:31
(anonymous) @ middleware.web.js:22
(anonymous) @ middleware.any.js:100
(anonymous) @ middleware.js:106
(anonymous) @ middleware.js:19
(anonymous) @ middleware.js:29
(anonymous) @ middleware.js:91
(anonymous) @ middleware.js:101
(anonymous) @ middleware.js:24
(anonymous) @ middleware.js:20
(anonymous) @ middleware.js:15
(anonymous) @ middleware.js:23
(anonymous) @ middleware.js:20
(anonymous) @ middleware.js:25
(anonymous) @ middleware.js:74
(anonymous) @ middleware.js:40
(anonymous) @ middleware.js:158
_start @ Conference.js:250
componentDidMount @ Conference.js:133
Es @ react-dom.production.min.js:238
t.unstable_runWithPriority @ scheduler.production.min.js:20
mr @ react-dom.production.min.js:113
Ss @ react-dom.production.min.js:230
ps @ react-dom.production.min.js:206
(anonymous) @ react-dom.production.min.js:114
t.unstable_runWithPriority @ scheduler.production.min.js:20
mr @ react-dom.production.min.js:113
br @ react-dom.production.min.js:114
gr @ react-dom.production.min.js:113
ds @ react-dom.production.min.js:204
enqueueSetState @ react-dom.production.min.js:127
k.setState @ react.production.min.js:13
(anonymous) @ BaseApp.js:241
_navigate @ BaseApp.js:240
(anonymous) @ middleware.js:149
Promise.then (async)
(anonymous) @ middleware.js:149
(anonymous) @ middleware.js:169
(anonymous) @ middleware.js:26
(anonymous) @ middleware.js:32
(anonymous) @ middleware.js:31
(anonymous) @ middleware.web.js:34
(anonymous) @ middleware.any.js:22
(anonymous) @ middleware.js:67
(anonymous) @ middleware.js:43
(anonymous) @ middleware.js:61
(anonymous) @ middleware.js:79
(anonymous) @ middleware.js:71
(anonymous) @ middleware.js:77
(anonymous) @ middleware.js:147
(anonymous) @ middleware.js:35
(anonymous) @ middleware.js:106
(anonymous) @ middleware.js:38
(anonymous) @ middleware.js:33
(anonymous) @ middleware.web.js:24
(anonymous) @ middleware.any.js:93
(anonymous) @ middleware.js:77
(anonymous) @ middleware.web.js:21
(anonymous) @ middleware.js:44
(anonymous) @ middleware.js:25
(anonymous) @ middleware.js:16
(anonymous) @ middleware.js:21
(anonymous) @ middleware.js:23
(anonymous) @ middleware.js:21
(anonymous) @ middleware.js:110
(anonymous) @ middleware.js:16
(anonymous) @ middleware.js:36
(anonymous) @ middleware.js:33
(anonymous) @ middleware.js:178
(anonymous) @ middleware.js:39
(anonymous) @ middleware.js:24
(anonymous) @ middleware.js:26
(anonymous) @ middleware.web.js:20
(anonymous) @ middleware.js:42
(anonymous) @ middleware.js:148
(anonymous) @ middleware.js:21
(anonymous) @ middleware.js:197
(anonymous) @ middleware.js:45
(anonymous) @ middleware.js:44
(anonymous) @ middleware.js:49
(anonymous) @ middleware.js:28
(anonymous) @ middleware.js:12
(anonymous) @ middleware.js:39
(anonymous) @ middleware.js:31
(anonymous) @ middleware.web.js:22
(anonymous) @ middleware.any.js:443
(anonymous) @ middleware.any.js:93
(anonymous) @ middleware.js:96
(anonymous) @ middleware.js:19
(anonymous) @ middleware.js:29
(anonymous) @ middleware.js:91
(anonymous) @ middleware.js:101
(anonymous) @ middleware.js:24
(anonymous) @ middleware.js:20
(anonymous) @ middleware.js:15
(anonymous) @ middleware.js:23
(anonymous) @ middleware.js:20
(anonymous) @ middleware.js:25
(anonymous) @ middleware.js:74
(anonymous) @ middleware.js:40
(anonymous) @ middleware.js:158
dispatch @ redux.js:636
(anonymous) @ actions.js:138
async function (async)
(anonymous) @ actions.js:111
(anonymous) @ index.js:11
(anonymous) @ middleware.js:29
(anonymous) @ middleware.js:32
(anonymous) @ middleware.js:31
(anonymous) @ middleware.web.js:34
(anonymous) @ middleware.any.js:22
(anonymous) @ middleware.js:67
(anonymous) @ middleware.js:43
(anonymous) @ middleware.js:61
(anonymous) @ middleware.js:79
(anonymous) @ middleware.js:71
(anonymous) @ middleware.js:77
(anonymous) @ middleware.js:39
(anonymous) @ middleware.js:106
(anonymous) @ middleware.js:38
(anonymous) @ middleware.js:33
(anonymous) @ middleware.web.js:24
(anonymous) @ middleware.any.js:93
(anonymous) @ middleware.js:77
(anonymous) @ middleware.web.js:21
(anonymous) @ middleware.js:44
(anonymous) @ middleware.js:25
(anonymous) @ middleware.js:16
(anonymous) @ middleware.js:21
(anonymous) @ middleware.js:23
(anonymous) @ middleware.js:21
(anonymous) @ middleware.js:110
(anonymous) @ middleware.js:16
(anonymous) @ middleware.js:36
(anonymous) @ middleware.js:33
(anonymous) @ middleware.js:178
(anonymous) @ middleware.js:39
(anonymous) @ middleware.js:24
(anonymous) @ middleware.js:26
(anonymous) @ middleware.web.js:20
(anonymous) @ middleware.js:42
(anonymous) @ middleware.js:148
(anonymous) @ middleware.js:21
(anonymous) @ middleware.js:60
(anonymous) @ middleware.js:44
(anonymous) @ middleware.js:49
(anonymous) @ middleware.js:28
(anonymous) @ middleware.js:12
(anonymous) @ middleware.js:39
(anonymous) @ middleware.js:31
(anonymous) @ middleware.web.js:22
(anonymous) @ middleware.any.js:100
(anonymous) @ middleware.js:106
(anonymous) @ middleware.js:19
(anonymous) @ middleware.js:29
(anonymous) @ middleware.js:91
(anonymous) @ middleware.js:101
(anonymous) @ middleware.js:24
(anonymous) @ middleware.js:20
(anonymous) @ middleware.js:15
(anonymous) @ middleware.js:23
(anonymous) @ middleware.js:20
(anonymous) @ middleware.js:25
(anonymous) @ middleware.js:74
(anonymous) @ middleware.js:40
(anonymous) @ middleware.js:158
_openURL @ AbstractApp.js:113
(anonymous) @ AbstractApp.js:47
Promise.then (async)
componentDidMount @ AbstractApp.js:44
Es @ react-dom.production.min.js:238
t.unstable_runWithPriority @ scheduler.production.min.js:20
mr @ react-dom.production.min.js:113
Ss @ react-dom.production.min.js:230
ds @ react-dom.production.min.js:204
Vs @ react-dom.production.min.js:263
Ws @ react-dom.production.min.js:263
(anonymous) @ react-dom.production.min.js:272
ys @ react-dom.production.min.js:208
el @ react-dom.production.min.js:272
render @ react-dom.production.min.js:273
Is.renderEntryPoint @ index.web.js:71
(anonymous) @ mytestroom:25
Show 204 more frames
Logger.js:154 2021-02-09T11:11:42.832Z [modules/xmpp/strophe.util.js] <Object.r.Strophe.log>: Strophe: Websocket error [object Event]
o @ Logger.js:154
r.Strophe.log @ strophe.util.js:90
error @ strophe.umd.js:1392
_onError @ strophe.umd.js:5730
error (async)
_connect @ strophe.umd.js:5465
connect @ strophe.umd.js:2368
_interceptConnectArgs @ strophe.stream-management.js:228
connect @ XmppConnection.js:248
_connect @ xmpp.js:443
connect @ xmpp.js:515
c.connect @ JitsiConnection.js:61
e @ connection.js:47
(anonymous) @ connection.js:178
d @ connection.js:103
h @ connection.js:208
W @ conference.js:185
createInitialLocalTracksAndConnect @ conference.js:657
init @ conference.js:779
async function (async)
init @ conference.js:744
(anonymous) @ actions.web.js:31
Promise.then (async)
(anonymous) @ actions.web.js:30
(anonymous) @ index.js:11
(anonymous) @ middleware.js:29
(anonymous) @ middleware.js:32
(anonymous) @ middleware.js:31
(anonymous) @ middleware.web.js:34
(anonymous) @ middleware.any.js:22
(anonymous) @ middleware.js:67
(anonymous) @ middleware.js:43
(anonymous) @ middleware.js:61
(anonymous) @ middleware.js:79
(anonymous) @ middleware.js:71
(anonymous) @ middleware.js:77
(anonymous) @ middleware.js:39
(anonymous) @ middleware.js:106
(anonymous) @ middleware.js:38
(anonymous) @ middleware.js:33
(anonymous) @ middleware.web.js:24
(anonymous) @ middleware.any.js:93
(anonymous) @ middleware.js:77
(anonymous) @ middleware.web.js:21
(anonymous) @ middleware.js:44
(anonymous) @ middleware.js:25
(anonymous) @ middleware.js:16
(anonymous) @ middleware.js:21
(anonymous) @ middleware.js:23
(anonymous) @ middleware.js:21
(anonymous) @ middleware.js:110
(anonymous) @ middleware.js:16
(anonymous) @ middleware.js:36
(anonymous) @ middleware.js:33
(anonymous) @ middleware.js:178
(anonymous) @ middleware.js:39
(anonymous) @ middleware.js:24
(anonymous) @ middleware.js:26
(anonymous) @ middleware.web.js:20
(anonymous) @ middleware.js:42
(anonymous) @ middleware.js:148
(anonymous) @ middleware.js:21
(anonymous) @ middleware.js:60
(anonymous) @ middleware.js:44
(anonymous) @ middleware.js:49
(anonymous) @ middleware.js:28
(anonymous) @ middleware.js:12
(anonymous) @ middleware.js:39
(anonymous) @ middleware.js:31
(anonymous) @ middleware.web.js:22
(anonymous) @ middleware.any.js:100
(anonymous) @ middleware.js:106
(anonymous) @ middleware.js:19
(anonymous) @ middleware.js:29
(anonymous) @ middleware.js:91
(anonymous) @ middleware.js:101
(anonymous) @ middleware.js:24
(anonymous) @ middleware.js:20
(anonymous) @ middleware.js:15
(anonymous) @ middleware.js:23
(anonymous) @ middleware.js:20
(anonymous) @ middleware.js:25
(anonymous) @ middleware.js:74
(anonymous) @ middleware.js:40
(anonymous) @ middleware.js:158
_start @ Conference.js:250
componentDidMount @ Conference.js:133
Es @ react-dom.production.min.js:238
t.unstable_runWithPriority @ scheduler.production.min.js:20
mr @ react-dom.production.min.js:113
Ss @ react-dom.production.min.js:230
ps @ react-dom.production.min.js:206
(anonymous) @ react-dom.production.min.js:114
t.unstable_runWithPriority @ scheduler.production.min.js:20
mr @ react-dom.production.min.js:113
br @ react-dom.production.min.js:114
gr @ react-dom.production.min.js:113
ds @ react-dom.production.min.js:204
enqueueSetState @ react-dom.production.min.js:127
k.setState @ react.production.min.js:13
(anonymous) @ BaseApp.js:241
_navigate @ BaseApp.js:240
(anonymous) @ middleware.js:149
Promise.then (async)
(anonymous) @ middleware.js:149
(anonymous) @ middleware.js:169
(anonymous) @ middleware.js:26
(anonymous) @ middleware.js:32
(anonymous) @ middleware.js:31
(anonymous) @ middleware.web.js:34
(anonymous) @ middleware.any.js:22
(anonymous) @ middleware.js:67
(anonymous) @ middleware.js:43
(anonymous) @ middleware.js:61
(anonymous) @ middleware.js:79
(anonymous) @ middleware.js:71
(anonymous) @ middleware.js:77
(anonymous) @ middleware.js:147
(anonymous) @ middleware.js:35
(anonymous) @ middleware.js:106
(anonymous) @ middleware.js:38
(anonymous) @ middleware.js:33
(anonymous) @ middleware.web.js:24
(anonymous) @ middleware.any.js:93
(anonymous) @ middleware.js:77
(anonymous) @ middleware.web.js:21
(anonymous) @ middleware.js:44
(anonymous) @ middleware.js:25
(anonymous) @ middleware.js:16
(anonymous) @ middleware.js:21
(anonymous) @ middleware.js:23
(anonymous) @ middleware.js:21
(anonymous) @ middleware.js:110
(anonymous) @ middleware.js:16
(anonymous) @ middleware.js:36
(anonymous) @ middleware.js:33
(anonymous) @ middleware.js:178
(anonymous) @ middleware.js:39
(anonymous) @ middleware.js:24
(anonymous) @ middleware.js:26
(anonymous) @ middleware.web.js:20
(anonymous) @ middleware.js:42
(anonymous) @ middleware.js:148
(anonymous) @ middleware.js:21
(anonymous) @ middleware.js:197
(anonymous) @ middleware.js:45
(anonymous) @ middleware.js:44
(anonymous) @ middleware.js:49
(anonymous) @ middleware.js:28
(anonymous) @ middleware.js:12
(anonymous) @ middleware.js:39
(anonymous) @ middleware.js:31
(anonymous) @ middleware.web.js:22
(anonymous) @ middleware.any.js:443
(anonymous) @ middleware.any.js:93
(anonymous) @ middleware.js:96
(anonymous) @ middleware.js:19
(anonymous) @ middleware.js:29
(anonymous) @ middleware.js:91
(anonymous) @ middleware.js:101
(anonymous) @ middleware.js:24
(anonymous) @ middleware.js:20
(anonymous) @ middleware.js:15
(anonymous) @ middleware.js:23
(anonymous) @ middleware.js:20
(anonymous) @ middleware.js:25
(anonymous) @ middleware.js:74
(anonymous) @ middleware.js:40
(anonymous) @ middleware.js:158
dispatch @ redux.js:636
(anonymous) @ actions.js:138
async function (async)
(anonymous) @ actions.js:111
(anonymous) @ index.js:11
(anonymous) @ middleware.js:29
(anonymous) @ middleware.js:32
(anonymous) @ middleware.js:31
(anonymous) @ middleware.web.js:34
(anonymous) @ middleware.any.js:22
(anonymous) @ middleware.js:67
(anonymous) @ middleware.js:43
(anonymous) @ middleware.js:61
(anonymous) @ middleware.js:79
(anonymous) @ middleware.js:71
(anonymous) @ middleware.js:77
(anonymous) @ middleware.js:39
(anonymous) @ middleware.js:106
(anonymous) @ middleware.js:38
(anonymous) @ middleware.js:33
(anonymous) @ middleware.web.js:24
(anonymous) @ middleware.any.js:93
(anonymous) @ middleware.js:77
(anonymous) @ middleware.web.js:21
(anonymous) @ middleware.js:44
(anonymous) @ middleware.js:25
(anonymous) @ middleware.js:16
(anonymous) @ middleware.js:21
(anonymous) @ middleware.js:23
(anonymous) @ middleware.js:21
(anonymous) @ middleware.js:110
(anonymous) @ middleware.js:16
(anonymous) @ middleware.js:36
(anonymous) @ middleware.js:33
(anonymous) @ middleware.js:178
(anonymous) @ middleware.js:39
(anonymous) @ middleware.js:24
(anonymous) @ middleware.js:26
(anonymous) @ middleware.web.js:20
(anonymous) @ middleware.js:42
(anonymous) @ middleware.js:148
(anonymous) @ middleware.js:21
(anonymous) @ middleware.js:60
(anonymous) @ middleware.js:44
(anonymous) @ middleware.js:49
(anonymous) @ middleware.js:28
(anonymous) @ middleware.js:12
(anonymous) @ middleware.js:39
(anonymous) @ middleware.js:31
(anonymous) @ middleware.web.js:22
(anonymous) @ middleware.any.js:100
(anonymous) @ middleware.js:106
(anonymous) @ middleware.js:19
(anonymous) @ middleware.js:29
(anonymous) @ middleware.js:91
(anonymous) @ middleware.js:101
(anonymous) @ middleware.js:24
(anonymous) @ middleware.js:20
(anonymous) @ middleware.js:15
(anonymous) @ middleware.js:23
(anonymous) @ middleware.js:20
(anonymous) @ middleware.js:25
(anonymous) @ middleware.js:74
(anonymous) @ middleware.js:40
(anonymous) @ middleware.js:158
_openURL @ AbstractApp.js:113
(anonymous) @ AbstractApp.js:47
Promise.then (async)
componentDidMount @ AbstractApp.js:44
Es @ react-dom.production.min.js:238
t.unstable_runWithPriority @ scheduler.production.min.js:20
mr @ react-dom.production.min.js:113
Ss @ react-dom.production.min.js:230
ds @ react-dom.production.min.js:204
Vs @ react-dom.production.min.js:263
Ws @ react-dom.production.min.js:263
(anonymous) @ react-dom.production.min.js:272
ys @ react-dom.production.min.js:208
el @ react-dom.production.min.js:272
render @ react-dom.production.min.js:273
Is.renderEntryPoint @ index.web.js:71
(anonymous) @ mytestroom:25
Show 201 more frames
Logger.js:154 2021-02-09T11:11:42.833Z [modules/xmpp/xmpp.js] <I.connectionHandler>: (TIME) Strophe connfail[The WebSocket connection could not be established or was disconnected.]: 2112.414999981411

If I disable websocket URL on mydomain-config.js, then it works but this is presumably due to jitsi meet being forced to go via BOSH

Any help is appreciated.
Thanks

To add, we have setup multiple JVBs up all on different servers
For the purpose to getting this setup, we have stopped all the JVBs apart from one

In my opinion, the easiest way is to install a fresh system

You are trying to enable websockets that replace bosh for xmpp signalling, do you have this in your nginx config jitsi-meet/jitsi-meet.example at bca9a12df1b5effbc48904303567670552b8bd29 · jitsi/jitsi-meet · GitHub
When doing that you need to make sure this is also enabled: jitsi-meet/mod_smacks.lua at master · jitsi/jitsi-meet · GitHub

Hi damencho,
Thanks for your reply
I have followed those steps, one of those was in the guide I Initially followed but the mod_smacks.Lua change was not so I have done this.
But still get an error as before.

I have 6 video bridges setup on a different servers, all with different names, so do I need to customise the below or any other suggestions? Please note that we are using jwt tokens to enter a room, and this works fine with the bosh setup, so not sure if something specific needs to be added for websockets with this regard.

# colibri (JVB) websockets for jvb1
location ~ ^/colibri-ws/default-id/(.*) {
    proxy_pass http://127.0.0.1:9090/colibri-ws/default-id/$1$is_args$args;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
    tcp_nodelay on;
}

strophe.umd.js:5463 WebSocket connection to ‘wss://mydomain/xmpp-websocket?room=mytestroom’ failed: Error during WebSocket handshake: Unexpected response code: 403
_connect @ strophe.umd.js:5463
connect @ strophe.umd.js:2368
_interceptConnectArgs @ strophe.stream-management.js:228
connect @ XmppConnection.js:248
_connect @ xmpp.js:443
connect @ xmpp.js:515
c.connect @ JitsiConnection.js:61
e @ connection.js:47
(anonymous) @ connection.js:178
d @ connection.js:103
h @ connection.js:208
W @ conference.js:185
createInitialLocalTracksAndConnect @ conference.js:657
init @ conference.js:779
Logger.js:154 2021-02-09T18:36:10.062Z [JitsiMeetJS.js] <Object.getGlobalOnErrorHandler>: UnhandledError: Strophe: Websocket error [object Event] Script: null Line: null Column: null StackTrace: Error: Strophe: Websocket error [object Event]
at Object.r.Strophe.log (mydomain/libs/lib-jitsi-meet.min.js?v=139:17:16531)
at Object.error (mydomain/libs/lib-jitsi-meet.min.js?v=139:1:23431)
at N.Websocket._onError (mydomain/libs/lib-jitsi-meet.min.js?v=139:1:62905)

This is for the websocket connection to the bridge.

This is the websocket that replaces the bosh. Different things.

Yes, you need to either add such a location for every bridge with correct IP address (not 127.0.0.1), or you can make your bridges use as a server id the ip-address and make one default rule, where you capture the string from the server id (replace default-id with a capture group, check docker repo for example as it is using that).

Hum, which version of prosody is that? Versions earlier than 0.11.7 need this patch jitsi-meet/mod_websocket_session_event.patch at master · jitsi/jitsi-meet · GitHub

Am using prosody 0.11.7 and the line mentioned in the patch is in ./usr/lib/prosody/modules/mod_websocket.lua

I have changed the videobridge IP , but its not getting that far as the connection is outright refused with the 403 error

The 403 error is not the jvb websocket. Any prosody errors you see?

I see the below in prosody.err
The error only occurs once the server starts.
No further errors upon attempted connection to a room.

Feb 09 22:37:11 portmanager error Error binding encrypted port for https: No certificate present in SSL/TLS configuration for https port 5281
Feb 09 22:37:11 portmanager error Error binding encrypted port for https: No certificate present in SSL/TLS configuration for https port 5281
jms1.univy.io:websocket error cross_domain_websocket = true only works in the global section

These you can ignore.

You may move that to the global config …

I will do but I guess that is not causing the issue I am facing…
Where can i grab the updated domain-config.js that signals xmpp via websockets Possibly something missing in the config I have. I just added websocket: URL into the existing one I had

meet.jit.si/config.js

Sorry forgot to reply
Was the config.js that was old in our setup, so all resolved now.
Thanks for your help