- OAuth authentication via Authentik - WebSocket connection to OpenClaw gateway - Configurable gateway URL with first-run setup - User preferences sync across devices - Multi-user support with custom assistant names - ElevenLabs TTS integration (local + remote) - FCM push notifications for alarms - Voice input via Google Speech API - No hardcoded secrets or internal IPs in tracked files
2.4 KiB
HAProxy WebSocket Configuration Fix
Issue
WebSocket connections open but messages aren't received by the Android client.
Root Cause
The HAProxy defaults section has option http-server-close which closes the connection after the HTTP response. This breaks WebSocket upgrade because HAProxy closes the connection before it can be upgraded to the WebSocket protocol.
Solution
Add no option http-server-close to the alfred_mobile_app-backend backend to override the default and keep the connection open for WebSocket upgrade.
Complete Backend Configuration
backend alfred_mobile_app-backend
option forwardfor
no option http-server-close
timeout tunnel 3600s
timeout server 3600s
# Pass the real client IP to backend (from proxy headers or direct connection)
# This is crucial for container-level logging and security tools
http-request add-header X-CLIENT-IP %[var(txn.real_ip)]
http-request set-header X-Real-IP %[var(txn.real_ip)]
http-request set-header X-Forwarded-For %[var(txn.real_ip)]
http-request set-header X-Forwarded-Proto https if { ssl_fc }
server alfred_app_proxy 192.168.1.169:18790 check
Changes Made
-
Added:
no option http-server-close- Overrides the global default
- Keeps connection open after HTTP upgrade response
-
Already added:
timeout tunnel 3600s- Keeps WebSocket tunnel open for 1 hour
-
Already added:
timeout server 3600s- Prevents server timeout on long connections
Testing
After applying this change:
- Reload HAProxy configuration
- Kill Alfred Mobile app
- Open app fresh
- WebSocket should connect and receive messages
- Connection should stay open
Alternative: TCP Mode (if HTTP mode still has issues)
If the above doesn't work, you can switch the entire backend to TCP mode for pure passthrough:
backend alfred_mobile_app-backend
mode tcp
timeout tunnel 3600s
timeout server 3600s
server alfred_app_proxy 192.168.1.169:18790 check
Note: TCP mode loses HTTP header manipulation (X-CLIENT-IP, X-Real-IP, etc.) but guarantees WebSocket works.
HAProxy WebSocket Documentation
From HAProxy docs:
For WebSocket connections, use
no option http-server-closeor switch tomode tcpto prevent HAProxy from closing the connection after the upgrade response.
Status
- Identified issue
- Applied fix
- Tested connection
- Verified messages flow