Solució a l'error 502 Bad Gateway i 504 Gateway Timeout al servidor Linux
Una guia pas a pas per resoldre problemes amb Nginx, Apache, PHP-FPM i el temps d'espera del servei.
vist als llocs web 502 Bad Gateway i 504 Temps d'espera de la passarel·la Els errors solen produir-se perquè el servidor web no rep la resposta correcta del servei de fons. Aquest servei pot ser PHP-FPM, el backend d'Apache, l'aplicació Node.js, el servei d'API del panell de jocs o una altra aplicació darrere del proxy.
Aquests errors són especialment comuns a l'allotjament, el panell de jocs, WHMCS, Pterodactyl, el panell d'administració personalitzat i els sistemes de llançament basats en web.
1. Diferència entre l'error 502 i 504
- 502 Bad Gateway: El servidor web no es pot connectar al servei de fons o rep una resposta confusa.
- Temps d'espera de la passarel·la 504: Sembla que el servei de backend està responent, però la resposta no es retorna a temps.
Per tant, 502 és més un error de connexió/servei i 504 és un problema de lentitud o temps d'espera.
2. Comprovació dels estats del servei
Primer, comproveu si el servidor web i els serveis PHP s'estan executant.
systemctl status nginx systemctl status apache2 systemctl status php-fpm
Als sistemes CentOS, AlmaLinux o Rocky Linux, el servei PHP-FPM es pot anomenar:
systemctl status php-fpm systemctl status httpd
Si el servei s'ha aturat, reinicieu-lo:
systemctl restart nginx systemctl restart php-fpm
3. Revisar els fitxers de registre
No és correcte continuar amb les conjectures per als errors 502 i 504. El fitxer de registre mostra la causa real de l'error.
tail -n 100 /var/log/nginx/error.log tail -n 100 /var/log/apache2/error.log
En sistemes basats en CentOS:
tail -n 100 /var/log/httpd/error_log
Les declaracions següents es poden veure als registres:
- connect() ha fallat: No es pot connectar al servei de backend.
- Esgotat el temps d'espera aigües amunt: El servei de backend respon tard.
- connexió rebutjada: El servei està inactiu o s'està reenviant al port incorrecte.
- permís denegat: Hi ha un problema de socket o de permís de fitxer.
4. Socket PHP-FPM o control de port
Nginx es connecta a PHP-FPM mitjançant sòcol o port. La ruta PHP-FPM al fitxer de configuració Nginx i el valor d'escolta PHP-FPM real han de ser els mateixos.
grep -R "fastcgi_pass" /etc/nginx/sites-enabled/ grep -R "listen =" /etc/php/*/fpm/pool.d/www.conf
Per exemple, si Nginx utilitza:
fastcgi_pass unix:/run/php/php8.2-fpm.sock;
El mateix sòcol s'ha d'escoltar al costat PHP-FPM:
listen = /run/php/php8.2-fpm.sock
5. Augment de la configuració del temps d'espera
Els errors 504 es poden rebre en grans panells de processament, mercats de joc, API o scripts PHP d'execució lenta. Els valors de temps d'espera de Nginx es poden augmentar.
nano /etc/nginx/nginx.conf
Es poden afegir els valors següents al bloc http o al bloc de servidor corresponent:
proxy_connect_timeout 300; proxy_send_timeout 300; proxy_read_timeout 300; fastcgi_read_timeout 300;
Proveu la configuració i reinicieu Nginx:
nginx -t systemctl restart nginx
6. Comprovació dels límits del procés PHP-FPM
Quan el trànsit augmenta, els límits de transaccions PHP-FPM poden ser insuficients. En aquest cas, les sol·licituds es posen a la cua i es produeix un temps d'espera.
nano /etc/php/8.2/fpm/pool.d/www.conf
Exemples de configuració:
pm = dynamic pm.max_children = 30 pm.start_servers = 5 pm.min_spare_servers = 5 pm.max_spare_servers = 10
Aquests valors s'han d'ajustar segons la quantitat de RAM del servidor. Establir un valor massa alt augmenta el consum de memòria RAM.
Errors comuns
- Canviar la configuració sense mirar el fitxer de registre
- No s'actualitza la ruta del sòcol Nginx tot i que la versió de PHP ha canviat
- No es corregeix la consulta lenta real augmentant el temps d'espera
- Augment dels límits de PHP-FPM sense calcular la memòria RAM
- Reiniciant el servei sense provar la configuració de Nginx
PMF
L'error 502 sempre és causat per Nginx?
No. Nginx és només el que mostra l'error. El problema real pot estar en PHP-FPM, el backend Apache, l'aplicació Node.js o un altre servei.
Augmentar el temps d'espera és la solució definitiva per als errors 504?
No sempre. L'augment del temps d'espera proporciona alleujament temporal. La solució real és trobar la consulta lenta, el processament pesat o el problema de rendiment.
És segur reiniciar PHP-FPM?
En general, és segur, però les sol·licituds actives es poden veure afectades durant un curt període de temps. En sistemes ocupats, s'haurien de preferir hores de trànsit baix.
Recomanacions de rendiment
- Comproveu la versió PHP-FPM i la ruta del sòcol regularment.
- Examineu els registres de consultes lentes al tauler web i als serveis de l'API.
- Si la memòria RAM és insuficient, no augmenteu inconscientment el valor max_children de PHP-FPM.
- Reduïu la càrrega del backend utilitzant un sistema de memòria cau.
- Gestioneu els registres d'errors abans que creixin amb logrotate.
Aquest article està preparat especialment per a PvPServer.