fix: support WebSocket connections through reverse proxies

- Handle X-Forwarded-Proto and X-Forwarded-Host headers in origin check
- Fixes WebSocket connections failing when accessed via reverse proxy
- Addresses #333 where connections broke after v4.3
This commit is contained in:
Pulse Monitor
2025-08-19 16:27:16 +00:00
parent 715efac145
commit 8849cceb76
+16 -3
View File
@@ -31,12 +31,25 @@ func (h *Hub) checkOrigin(r *http.Request) bool {
allowedOrigins := h.allowedOrigins
h.mu.RUnlock()
// Always allow same-origin requests
// Determine the actual origin based on proxy headers
scheme := "http"
if r.TLS != nil {
host := r.Host
// Check if we're behind a reverse proxy
if forwardedProto := r.Header.Get("X-Forwarded-Proto"); forwardedProto != "" {
scheme = forwardedProto
} else if r.TLS != nil {
scheme = "https"
}
requestOrigin := scheme + "://" + r.Host
// Use X-Forwarded-Host if available (for reverse proxy scenarios)
if forwardedHost := r.Header.Get("X-Forwarded-Host"); forwardedHost != "" {
host = forwardedHost
}
requestOrigin := scheme + "://" + host
// Allow same-origin requests (accounting for proxy headers)
if origin == requestOrigin {
return true
}