Bezoek je je website en zie je dat deze maar blijft laden? Na lang wachten verschijnt de vervelende melding: 502 Bad Gateway. Wat betekent dit precies, en wat kun je doen om dit te voorkomen?
Wat veroorzaakt een 502 Bad Gateway?
Wanneer je website een 502-foutmelding geeft, betekent dit dat er iets misgaat tussen de server en een externe verbinding. De meest voorkomende oorzaak is dat PHP-processen vastlopen door een externe verbinding die blijft hangen. Dit is vooral vervelend, maar er zijn manieren om het risico te verkleinen dat dit nogmaals gebeurt.
Hoe werkt het?
Om het probleem te begrijpen, is het goed om te weten hoe PHP-verzoeken worden afgehandeld. Bij elk verzoek aan je website wordt een PHP worker ingezet om dat verzoek te verwerken. Zodra dit is afgerond, wordt de worker weer vrijgegeven voor nieuwe verzoeken.
Maar stel je voor dat je applicatie (bijv. cURL of Guzzle) een externe service aanroept, zoals een weerbericht. Normaal duurt dit minder dan een seconde. Maar als die externe service traag is of niet reageert, blijft je applicatie wachten, en blijft de PHP worker bezet.
Als dit vaker gebeurt, kunnen alle PHP workers bezet raken, en nieuwe bezoekers krijgen geen toegang meer tot de site, wat leidt tot een 502 Bad Gateway.
Wat kun je doen om dit te voorkomen?
Helaas is er geen definitieve oplossing voor dit probleem. Zelfs het verhogen van het aantal PHP workers helpt maar tijdelijk. Maar er zijn enkele stappen die je kunt nemen om de kans op problemen te verkleinen:
- Controleer welke cURL-aanvragen je applicatie doet en doe dit alleen wanneer strikt nodig.
- Gebruik APM-tooling zoals New Relic of Datadog om snel te zien welk extern endpoint vastloopt.
- Verlaag de timeout van standaard cURL-aanvragen van 30 seconden naar bijvoorbeeld 5 seconden.
- Zorg voor een noodoplossing waarmee je externe verbindingen tijdelijk kunt pauzeren.
Door deze stappen te volgen, verklein je de kans op een 502 Bad Gateway-fout en houd je je website soepel draaiend.