Uw WebSocket-applicatie wordt lokaal uitgevoerd. Bij het staging achter nginx lijkt alles in orde – tot op de minuut: de verbinding wordt verbroken, de client probeert opnieuw verbinding te maken, de gebruiker ziet een ‘niet-verbonden’ flits. De applicatielogboeken laten geen uitzonderingen zien. Alleen de proxy besloot dat de sessie inactief was.
Dit patroon (exact 60 seconden) is een van de snelste diagnoses in webhosting. Voordat u de onMessage-handler optimaliseert, moet u de storing timen: het aantal seconden geeft vaak de boosdoener aan.
WebSocket achter een omgekeerde proxy
De browser verzendt een HTTP-verzoek met Upgrade: websocket. De proxy moet de headers 'Upgrade' en 'Connection' verzenden, geen klassieke HTTP-time-out toepassen op een langdurige verbinding, en bidirectionele frames doorlaten zonder voor onbepaalde tijd te bufferen.
| Onderdeel | Kritische aanpassing | Veel voorkomende fout |
|---|---|---|
| nginx | proxy_read_timeout | Standaard jaren 60 |
| HAProxy | tunneltime-out | klanttime-out te kort |
| AWS-ALB | time-out voor inactiviteit | 60 s minimaal configureerbaar |
| Wolkenvlam | WebSocketsON | time-outrand + noodzaak voor ping |
WebSocket is geen “lang” HTTP-verzoek; het is een apart protocol na de upgrade. De proxy moet dit als zodanig behandelen.
Typische nginx-configuratie
kaart $http_upgrade $connection_upgrade {
standaardupgrade;
'' dichtbij;
}
locatie /ws/ {
proxy_pass http://backend;
proxy_http_versie 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Verbinding $connection_upgrade;
proxy_read_timeout 3600s;
proxy_send_timeout 3600s;
}
Pas '3600s' aan uw situatie aan - afgestemd op de hartslag van de toepassing, niet op oneindig. Controleer ook of de backend lange verbindingen accepteert en dat de tussenliggende firewall geen eigen inactieve limiet oplegt.
Applicatiehartslag: verplicht in productie
Zelfs bij hoge time-outs kunt u elke 30 tot 45 seconden een WebSocket-ping (of een lichtgewicht JSON-bericht) verzenden als een schakel in de keten na 60 of 100 seconden wordt afgebroken. Aan de kant van Node (ws), Python (websockets) of Phoenix-kanalen: activeer native ping/pong of implementeer het expliciet.
Opzettelijk testen gedurende één minuut inactiviteit van de gebruiker, niet alleen bij continu verkeer. Een sessie die tijdens een videogesprek open blijft zonder sollicitatiebericht, legt al snel de grenzen van de proxy of CDN bloot.
CDN en beheerde hosting
Als de WebSocket via Cloudflare of een WAF passeert, schakel dan WebSockets in het dashboard in, controleer de duur of berichtlimieten per abonnement en blijf vaker pingen dan de time-outgrens. Bij directe oorsprong zonder CDN wordt het probleem vaak gereduceerd tot nginx of HAProxy.
Lees op PaaS (Clever Cloud, Railway, Heroku) de documentatie over lange verbindingen; sommige routers leggen harde caps op. Vergelijk geschikte aanbiedingen via onze overzicht als realtime verbindingen centraal staan in uw product.
Bovenaan: de bug zit niet in je onMessage-handler
Beslis en ga vooruit zonder blinde vlek
Bepaal eerst het exacte ontkoppelingsinterval en correleer dit met de gedocumenteerde time-outs van elke link (nginx, load balancer, CDN, PaaS). Corrigeer vervolgens de Upgrade-headers en proxy-time-outs en voeg vervolgens een frequentere ping/pong toe dan de kortste time-out. Test vanaf productie met één minuut vrijwillige inactiviteit – localhost verbergt vaak de middelste laag. Documenteer de uiteindelijke configuratie in het implementatierunbook om te voorkomen dat een nginx-herimplementatie de standaardwaarden opnieuw instelt.
Veelgestelde vragen
Waarom precies 60 seconden?
standaard nginx proxy_read_timeout en huidige waarde op load balancers. Een vast interval verwijst naar de transportlaag, niet naar een willekeurige toepassingsuitzondering.
Welke nginx-richtlijnen voor WebSocket?
HTTP/1.1, upgrade, verbindingsupgrade, hoge proxy_read/send_timeout, kaart $http_upgrade voor gemengde HTTP- en WebSocket-verbindingen.
Ondersteunt Cloudflare langlopende WebSockets?
Ja op compatibele abonnementen; een applicatieping blijft aanbevolen voor stille of zeer lange sessies.
Moeten we de time-out onbeperkt verlengen?
Nee: combineer een time-out die is afgestemd op de hartslag en een regelmatige ping vaker dan de strengste schakel in de keten.
Als uw WebSocket op dat moment wegvalt, debug dan niet het bericht; debug wie de verbinding verbreekt en na precies hoeveel seconden.
