uptime-kuma: Cant connect to the socket when hosted by proxy

⚠️ Please verify that this bug has NOT been raised before.

  • I checked and didn’t find similar issue

πŸ›‘οΈ Security Policy

Description

I just installed Uptime Kuma and im very happy with it. However, as im hosting it with docker and i want to point a subdomain to it through my Plesk installation, i have to do that through a ProxyPass like so:

RewriteEngine On
ProxyPass / https://ip:3001/
ProxyPassReverse / https//ip:3001/

When doing that, i can successfully open the subdomain, and it will be directed to the Docker installation, but the websocket connection fails: xFl2DfCk1993b

Can this somehow be fixed?

πŸ‘Ÿ Reproduction steps

  1. Install Uptime Kuma through Docker.
  2. Point a ProxyPass to the IP and Port of the Docker instance.
  3. Visit the host configured through the ProxyPass.
  4. See Error πŸ˜›

πŸ‘€ Expected behavior

I would like to still be able to use Uptime Kuma even when hosted with a ProxyPass. The Websocket should be able to connect.

πŸ˜“ Actual Behavior

The Websocket can not connect properly. View image above.

🐻 Uptime-Kuma Version

1.10.2

πŸ’» Operating System and Arch

Windows 10

🌐 Browser

Chrome

πŸ‹ Docker Version

19.03.15

🟩 NodeJS Version

No response

πŸ“ Relevant log output

vendor.f3bba5ad.js:55 WebSocket connection to 'wss://kuma.example.de/socket.io/?EIO=4&transport=websocket' failed: 
doOpen @ vendor.f3bba5ad.js:55
index.3fc36d03.js:1 Failed to connect to the backend. Socket.io connect_error: websocket error
(anonymous) @ index.3fc36d03.js:1
vendor.f3bba5ad.js:55 WebSocket connection to 'wss://kuma.example.de/socket.io/?EIO=4&transport=websocket' failed: 
doOpen @ vendor.f3bba5ad.js:55
index.3fc36d03.js:1 Failed to connect to the backend. Socket.io connect_error: websocket error
(anonymous) @ index.3fc36d03.js:1
vendor.f3bba5ad.js:55 WebSocket connection to 'wss://kuma.example.de/socket.io/?EIO=4&transport=websocket' failed: 
doOpen @ vendor.f3bba5ad.js:55
open @ vendor.f3bba5ad.js:55
open @ vendor.f3bba5ad.js:55
QM @ vendor.f3bba5ad.js:55
dC.exports @ vendor.f3bba5ad.js:55
open @ vendor.f3bba5ad.js:55
(anonymous) @ vendor.f3bba5ad.js:55
index.3fc36d03.js:1 Failed to connect to the backend. Socket.io connect_error: websocket error
(anonymous) @ index.3fc36d03.js:1
t.emit @ vendor.f3bba5ad.js:55
emitReserved @ vendor.f3bba5ad.js:55
onerror @ vendor.f3bba5ad.js:55
t.emit @ vendor.f3bba5ad.js:55
emitReserved @ vendor.f3bba5ad.js:55
(anonymous) @ vendor.f3bba5ad.js:55
t.emit @ vendor.f3bba5ad.js:55
onError @ vendor.f3bba5ad.js:55
t.emit @ vendor.f3bba5ad.js:55
onError @ vendor.f3bba5ad.js:55
ws.onerror @ vendor.f3bba5ad.js:55
error (async)
addEventListeners @ vendor.f3bba5ad.js:55
doOpen @ vendor.f3bba5ad.js:55
open @ vendor.f3bba5ad.js:55
open @ vendor.f3bba5ad.js:55
QM @ vendor.f3bba5ad.js:55
dC.exports @ vendor.f3bba5ad.js:55
open @ vendor.f3bba5ad.js:55
(anonymous) @ vendor.f3bba5ad.js:55
vendor.f3bba5ad.js:55 WebSocket connection to 'wss://kuma.example.de/socket.io/?EIO=4&transport=websocket' failed: 
doOpen @ vendor.f3bba5ad.js:55
open @ vendor.f3bba5ad.js:55
open @ vendor.f3bba5ad.js:55
QM @ vendor.f3bba5ad.js:55
dC.exports @ vendor.f3bba5ad.js:55
open @ vendor.f3bba5ad.js:55
(anonymous) @ vendor.f3bba5ad.js:55
index.3fc36d03.js:1 Failed to connect to the backend. Socket.io connect_error: websocket error
(anonymous) @ index.3fc36d03.js:1
t.emit @ vendor.f3bba5ad.js:55
emitReserved @ vendor.f3bba5ad.js:55
onerror @ vendor.f3bba5ad.js:55
t.emit @ vendor.f3bba5ad.js:55
emitReserved @ vendor.f3bba5ad.js:55
(anonymous) @ vendor.f3bba5ad.js:55
t.emit @ vendor.f3bba5ad.js:55
onError @ vendor.f3bba5ad.js:55
t.emit @ vendor.f3bba5ad.js:55
onError @ vendor.f3bba5ad.js:55
ws.onerror @ vendor.f3bba5ad.js:55
error (async)
addEventListeners @ vendor.f3bba5ad.js:55
doOpen @ vendor.f3bba5ad.js:55
open @ vendor.f3bba5ad.js:55
open @ vendor.f3bba5ad.js:55
QM @ vendor.f3bba5ad.js:55
dC.exports @ vendor.f3bba5ad.js:55
open @ vendor.f3bba5ad.js:55
(anonymous) @ vendor.f3bba5ad.js:55
setTimeout (async)
reconnect @ vendor.f3bba5ad.js:55
(anonymous) @ vendor.f3bba5ad.js:55
(anonymous) @ vendor.f3bba5ad.js:55
t.emit @ vendor.f3bba5ad.js:55
onError @ vendor.f3bba5ad.js:55
t.emit @ vendor.f3bba5ad.js:55
onError @ vendor.f3bba5ad.js:55
ws.onerror @ vendor.f3bba5ad.js:55
error (async)
addEventListeners @ vendor.f3bba5ad.js:55
doOpen @ vendor.f3bba5ad.js:55
open @ vendor.f3bba5ad.js:55
open @ vendor.f3bba5ad.js:55
QM @ vendor.f3bba5ad.js:55
dC.exports @ vendor.f3bba5ad.js:55
open @ vendor.f3bba5ad.js:55
(anonymous) @ vendor.f3bba5ad.js:55
vendor.f3bba5ad.js:55 WebSocket connection to 'wss://kuma.example.de/socket.io/?EIO=4&transport=websocket' failed: 
doOpen @ vendor.f3bba5ad.js:55
open @ vendor.f3bba5ad.js:55
open @ vendor.f3bba5ad.js:55
QM @ vendor.f3bba5ad.js:55
dC.exports @ vendor.f3bba5ad.js:55
open @ vendor.f3bba5ad.js:55
(anonymous) @ vendor.f3bba5ad.js:55
index.3fc36d03.js:1 Failed to connect to the backend. Socket.io connect_error: websocket error
(anonymous) @ index.3fc36d03.js:1
t.emit @ vendor.f3bba5ad.js:55
emitReserved @ vendor.f3bba5ad.js:55
onerror @ vendor.f3bba5ad.js:55
t.emit @ vendor.f3bba5ad.js:55
emitReserved @ vendor.f3bba5ad.js:55
(anonymous) @ vendor.f3bba5ad.js:55
t.emit @ vendor.f3bba5ad.js:55
onError @ vendor.f3bba5ad.js:55
t.emit @ vendor.f3bba5ad.js:55
onError @ vendor.f3bba5ad.js:55
ws.onerror @ vendor.f3bba5ad.js:55
error (async)
addEventListeners @ vendor.f3bba5ad.js:55
doOpen @ vendor.f3bba5ad.js:55
open @ vendor.f3bba5ad.js:55
open @ vendor.f3bba5ad.js:55
QM @ vendor.f3bba5ad.js:55
dC.exports @ vendor.f3bba5ad.js:55
open @ vendor.f3bba5ad.js:55
(anonymous) @ vendor.f3bba5ad.js:55
setTimeout (async)
reconnect @ vendor.f3bba5ad.js:55
(anonymous) @ vendor.f3bba5ad.js:55
(anonymous) @ vendor.f3bba5ad.js:55
t.emit @ vendor.f3bba5ad.js:55
onError @ vendor.f3bba5ad.js:55
t.emit @ vendor.f3bba5ad.js:55
onError @ vendor.f3bba5ad.js:55
ws.onerror @ vendor.f3bba5ad.js:55
error (async)
addEventListeners @ vendor.f3bba5ad.js:55
doOpen @ vendor.f3bba5ad.js:55
open @ vendor.f3bba5ad.js:55
open @ vendor.f3bba5ad.js:55
QM @ vendor.f3bba5ad.js:55
dC.exports @ vendor.f3bba5ad.js:55
open @ vendor.f3bba5ad.js:55
(anonymous) @ vendor.f3bba5ad.js:55
setTimeout (async)
reconnect @ vendor.f3bba5ad.js:55
(anonymous) @ vendor.f3bba5ad.js:55
(anonymous) @ vendor.f3bba5ad.js:55
t.emit @ vendor.f3bba5ad.js:55
onError @ vendor.f3bba5ad.js:55
t.emit @ vendor.f3bba5ad.js:55
onError @ vendor.f3bba5ad.js:55
ws.onerror @ vendor.f3bba5ad.js:55
error (async)
addEventListeners @ vendor.f3bba5ad.js:55
doOpen @ vendor.f3bba5ad.js:55
open @ vendor.f3bba5ad.js:55
open @ vendor.f3bba5ad.js:55
QM @ vendor.f3bba5ad.js:55
dC.exports @ vendor.f3bba5ad.js:55
open @ vendor.f3bba5ad.js:55
(anonymous) @ vendor.f3bba5ad.js:55
vendor.f3bba5ad.js:55 WebSocket connection to 'wss://kuma.example.de/socket.io/?EIO=4&transport=websocket' failed: 
doOpen @ vendor.f3bba5ad.js:55
open @ vendor.f3bba5ad.js:55
open @ vendor.f3bba5ad.js:55
QM @ vendor.f3bba5ad.js:55
dC.exports @ vendor.f3bba5ad.js:55
open @ vendor.f3bba5ad.js:55
(anonymous) @ vendor.f3bba5ad.js:55
index.3fc36d03.js:1 Failed to connect to the backend. Socket.io connect_error: websocket error
(anonymous) @ index.3fc36d03.js:1
t.emit @ vendor.f3bba5ad.js:55
emitReserved @ vendor.f3bba5ad.js:55
onerror @ vendor.f3bba5ad.js:55
t.emit @ vendor.f3bba5ad.js:55
emitReserved @ vendor.f3bba5ad.js:55
(anonymous) @ vendor.f3bba5ad.js:55
t.emit @ vendor.f3bba5ad.js:55
onError @ vendor.f3bba5ad.js:55
t.emit @ vendor.f3bba5ad.js:55
onError @ vendor.f3bba5ad.js:55
ws.onerror @ vendor.f3bba5ad.js:55
error (async)
addEventListeners @ vendor.f3bba5ad.js:55
doOpen @ vendor.f3bba5ad.js:55
open @ vendor.f3bba5ad.js:55
open @ vendor.f3bba5ad.js:55
QM @ vendor.f3bba5ad.js:55
dC.exports @ vendor.f3bba5ad.js:55
open @ vendor.f3bba5ad.js:55
(anonymous) @ vendor.f3bba5ad.js:55
setTimeout (async)
reconnect @ vendor.f3bba5ad.js:55
(anonymous) @ vendor.f3bba5ad.js:55
(anonymous) @ vendor.f3bba5ad.js:55
t.emit @ vendor.f3bba5ad.js:55
onError @ vendor.f3bba5ad.js:55
t.emit @ vendor.f3bba5ad.js:55
onError @ vendor.f3bba5ad.js:55
ws.onerror @ vendor.f3bba5ad.js:55
error (async)
addEventListeners @ vendor.f3bba5ad.js:55
doOpen @ vendor.f3bba5ad.js:55
open @ vendor.f3bba5ad.js:55
open @ vendor.f3bba5ad.js:55
QM @ vendor.f3bba5ad.js:55
dC.exports @ vendor.f3bba5ad.js:55
open @ vendor.f3bba5ad.js:55
(anonymous) @ vendor.f3bba5ad.js:55
setTimeout (async)
reconnect @ vendor.f3bba5ad.js:55
(anonymous) @ vendor.f3bba5ad.js:55
(anonymous) @ vendor.f3bba5ad.js:55
t.emit @ vendor.f3bba5ad.js:55
onError @ vendor.f3bba5ad.js:55
t.emit @ vendor.f3bba5ad.js:55
onError @ vendor.f3bba5ad.js:55
ws.onerror @ vendor.f3bba5ad.js:55
error (async)
addEventListeners @ vendor.f3bba5ad.js:55
doOpen @ vendor.f3bba5ad.js:55
open @ vendor.f3bba5ad.js:55
open @ vendor.f3bba5ad.js:55
QM @ vendor.f3bba5ad.js:55
dC.exports @ vendor.f3bba5ad.js:55
open @ vendor.f3bba5ad.js:55
(anonymous) @ vendor.f3bba5ad.js:55
setTimeout (async)
reconnect @ vendor.f3bba5ad.js:55
(anonymous) @ vendor.f3bba5ad.js:55
(anonymous) @ vendor.f3bba5ad.js:55
t.emit @ vendor.f3bba5ad.js:55
onError @ vendor.f3bba5ad.js:55
t.emit @ vendor.f3bba5ad.js:55
onError @ vendor.f3bba5ad.js:55
ws.onerror @ vendor.f3bba5ad.js:55
error (async)
addEventListeners @ vendor.f3bba5ad.js:55
doOpen @ vendor.f3bba5ad.js:55
open @ vendor.f3bba5ad.js:55
open @ vendor.f3bba5ad.js:55
QM @ vendor.f3bba5ad.js:55
dC.exports @ vendor.f3bba5ad.js:55
open @ vendor.f3bba5ad.js:55
(anonymous) @ vendor.f3bba5ad.js:55
vendor.f3bba5ad.js:55 WebSocket connection to 'wss://kuma.example.de/socket.io/?EIO=4&transport=websocket' failed: 
doOpen @ vendor.f3bba5ad.js:55
open @ vendor.f3bba5ad.js:55
open @ vendor.f3bba5ad.js:55
QM @ vendor.f3bba5ad.js:55
dC.exports @ vendor.f3bba5ad.js:55
open @ vendor.f3bba5ad.js:55
(anonymous) @ vendor.f3bba5ad.js:55
index.3fc36d03.js:1 Failed to connect to the backend. Socket.io connect_error: websocket error
(anonymous) @ index.3fc36d03.js:1
t.emit @ vendor.f3bba5ad.js:55
emitReserved @ vendor.f3bba5ad.js:55
onerror @ vendor.f3bba5ad.js:55
t.emit @ vendor.f3bba5ad.js:55
emitReserved @ vendor.f3bba5ad.js:55
(anonymous) @ vendor.f3bba5ad.js:55
t.emit @ vendor.f3bba5ad.js:55
onError @ vendor.f3bba5ad.js:55
t.emit @ vendor.f3bba5ad.js:55
onError @ vendor.f3bba5ad.js:55
ws.onerror @ vendor.f3bba5ad.js:55
error (async)
addEventListeners @ vendor.f3bba5ad.js:55
doOpen @ vendor.f3bba5ad.js:55
open @ vendor.f3bba5ad.js:55
open @ vendor.f3bba5ad.js:55
QM @ vendor.f3bba5ad.js:55
dC.exports @ vendor.f3bba5ad.js:55
open @ vendor.f3bba5ad.js:55
(anonymous) @ vendor.f3bba5ad.js:55
setTimeout (async)
reconnect @ vendor.f3bba5ad.js:55
(anonymous) @ vendor.f3bba5ad.js:55
(anonymous) @ vendor.f3bba5ad.js:55
t.emit @ vendor.f3bba5ad.js:55
onError @ vendor.f3bba5ad.js:55
t.emit @ vendor.f3bba5ad.js:55
onError @ vendor.f3bba5ad.js:55
ws.onerror @ vendor.f3bba5ad.js:55
error (async)
addEventListeners @ vendor.f3bba5ad.js:55
doOpen @ vendor.f3bba5ad.js:55
open @ vendor.f3bba5ad.js:55
open @ vendor.f3bba5ad.js:55
QM @ vendor.f3bba5ad.js:55
dC.exports @ vendor.f3bba5ad.js:55
open @ vendor.f3bba5ad.js:55
(anonymous) @ vendor.f3bba5ad.js:55
setTimeout (async)
reconnect @ vendor.f3bba5ad.js:55
(anonymous) @ vendor.f3bba5ad.js:55
(anonymous) @ vendor.f3bba5ad.js:55
t.emit @ vendor.f3bba5ad.js:55
onError @ vendor.f3bba5ad.js:55
t.emit @ vendor.f3bba5ad.js:55
onError @ vendor.f3bba5ad.js:55
ws.onerror @ vendor.f3bba5ad.js:55
error (async)
addEventListeners @ vendor.f3bba5ad.js:55
doOpen @ vendor.f3bba5ad.js:55
open @ vendor.f3bba5ad.js:55
open @ vendor.f3bba5ad.js:55
QM @ vendor.f3bba5ad.js:55
dC.exports @ vendor.f3bba5ad.js:55
open @ vendor.f3bba5ad.js:55
(anonymous) @ vendor.f3bba5ad.js:55
setTimeout (async)
reconnect @ vendor.f3bba5ad.js:55
(anonymous) @ vendor.f3bba5ad.js:55
(anonymous) @ vendor.f3bba5ad.js:55
t.emit @ vendor.f3bba5ad.js:55
onError @ vendor.f3bba5ad.js:55
t.emit @ vendor.f3bba5ad.js:55
onError @ vendor.f3bba5ad.js:55
ws.onerror @ vendor.f3bba5ad.js:55
error (async)
addEventListeners @ vendor.f3bba5ad.js:55
doOpen @ vendor.f3bba5ad.js:55
open @ vendor.f3bba5ad.js:55
open @ vendor.f3bba5ad.js:55
QM @ vendor.f3bba5ad.js:55
dC.exports @ vendor.f3bba5ad.js:55
open @ vendor.f3bba5ad.js:55
(anonymous) @ vendor.f3bba5ad.js:55
setTimeout (async)
reconnect @ vendor.f3bba5ad.js:55
(anonymous) @ vendor.f3bba5ad.js:55
(anonymous) @ vendor.f3bba5ad.js:55
t.emit @ vendor.f3bba5ad.js:55
onError @ vendor.f3bba5ad.js:55
t.emit @ vendor.f3bba5ad.js:55
onError @ vendor.f3bba5ad.js:55
ws.onerror @ vendor.f3bba5ad.js:55
error (async)
addEventListeners @ vendor.f3bba5ad.js:55
doOpen @ vendor.f3bba5ad.js:55
open @ vendor.f3bba5ad.js:55
open @ vendor.f3bba5ad.js:55
QM @ vendor.f3bba5ad.js:55
dC.exports @ vendor.f3bba5ad.js:55
open @ vendor.f3bba5ad.js:55
(anonymous) @ vendor.f3bba5ad.js:55

About this issue

  • Original URL
  • State: closed
  • Created 3 years ago
  • Comments: 19

Most upvoted comments

I had a similar problem first when using Apache as reverse proxy. With the following setup it works now fine:


ProxyPreserveHost On
ProxyPass / http://127.0.0.1:3001/
ProxyPassReverse / http://127.0.0.1:3001/
Protocols h2 http/1.1
RewriteEngine on
RewriteCond %{HTTP:Upgrade} websocket [NC]
RewriteCond %{HTTP:Connection} upgrade [NC]
RewriteRule ^/?(.*) "ws://localhost:3001/$1" [P,L]

I also did activate these apache modules for it to run:

a2enmod proxy_http
a2enmod proxy_wstunnel

The Status page don’t use Sockets I think but in your dashboard look at the errors in console