FAQ: WebSocket/STOMP does not work (Safari downloads iframe.html)
Symptoms
- 403/400 on
GET /stomp/**in the UI. - In backend logs:
DefaultHandshakeHandler: "Handshake failed due to invalid Upgrade header: null". - SockJS falls back and downloads
/stomp/iframe.html(in Safari).
Cause
Ordinary NGINX (VM) is used without a WebSocket proxy (no Upgrade/Connection: upgrade, HTTP/1.1 is not enabled, and there is no separate location for /stomp/**).
Solution
Add a separate block for /stomp/**:
# Upstream: Cabinee backend (legacy compose service name: unibpm)
location /stomp/ {
proxy_pass http://unibpm/;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header 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_read_timeout 86400;
}