502 Bad Gateway: αιτίες και πώς να το διορθώσεις
· 2 λεπτά ανάγνωσης
Τι σημαίνει το σφάλμα
Το 502 είναι απάντηση από έναν server που λειτουργεί. Ο web server μπροστά (nginx, Apache, ένας load balancer ή ένα CDN όπως το Cloudflare) έλαβε το αίτημα, το προώθησε στην εφαρμογή πίσω του (PHP-FPM, μια διεργασία Node.js ή Python, έναν backend server) και δεν πήρε πίσω χρησιμοποιήσιμη απάντηση: η σύνδεση απορρίφθηκε, διακόπηκε ή επέστρεψε σκουπίδια. Το «Gateway» είναι ο server μπροστά· το «bad» είναι ό,τι ήρθε από πίσω.
Άρα ένα 502 σου λέει δύο πράγματα μαζί: το μπροστινό μέρος λειτουργεί και το πίσω έχει πέσει ή είναι χαλασμένο. Αυτό περιορίζει σημαντικά την αναζήτηση.
Συνηθισμένες αιτίες
- Η διεργασία της εφαρμογής δεν τρέχει. Το PHP-FPM κράσαρε ή σταμάτησε, η διεργασία Node.js πέθανε, το container τερμάτισε. Το μπροστινό μέρος δεν μπορεί να συνδεθεί καθόλου.
- Η εφαρμογή είναι υπερφορτωμένη. Όλοι οι workers του PHP-FPM είναι απασχολημένοι, η ουρά είναι γεμάτη, οι νέες συνδέσεις απορρίπτονται. Συχνά μετά από κορύφωση επισκεψιμότητας ή ένα αργό query βάσης δεδομένων που μπλοκάρει κάθε worker.
- Λάθος socket ή θύρα στις ρυθμίσεις. Μετά από μια ενημέρωση ή αλλαγή έκδοσης PHP, το nginx δείχνει ακόμη στο
php8.2-fpm.sockενώ το νέο pool ακούει στοphp8.4-fpm.sock. - Πολύ αυστηρά timeouts. Το backend απαντά, αλλά αργότερα από όσο θέλει να περιμένει το μπροστινό μέρος. Ορισμένες ρυθμίσεις το αναφέρουν ως 502, άλλες ως 504 Gateway Timeout.
- Το backend στέλνει υπερβολικά μεγάλη κεφαλίδα ή μη έγκυρη απάντηση. Τυπικό για frameworks που βάζουν πολλά στα cookies· το nginx καταγράφει τότε «upstream sent too big header».
- Το CDN δεν φτάνει στον server σου. Με το Cloudflare μπροστά, μια σελίδα 502 με το λογότυπο του Cloudflare σημαίνει ότι το Cloudflare δεν πήρε τίποτα από τον origin σου: firewall, λάθος IP μετά από μετακίνηση ή ο server απλώς έχει πέσει.
Αν είσαι επισκέπτης
Δεν μπορείς να διορθώσεις ένα 502 στην ιστοσελίδα κάποιου άλλου. Φόρτωσε ξανά μία φορά μετά από ένα λεπτό· αν επιμένει, πρέπει να ενεργήσει ο ιδιοκτήτης της ιστοσελίδας. Για τη δική σου ιστοσελίδα, συνέχισε να διαβάζεις.
Αν είναι η δική σου ιστοσελίδα: έλεγξε πρώτα
Έχει πέσει για όλους; Τρέξε τον έλεγχο διαθεσιμότητας ιστοσελίδας. Δείχνει τον κωδικό κατάστασης απέξω και αν απάντησε ένα CDN ή ο origin.
Shared hosting ή εργαλείο δημιουργίας ιστοσελίδων; Ένα 502 εκεί είναι σχεδόν πάντα πρόβλημα του παρόχου (ένα υπερφορτωμένο pool PHP σε κοινόχρηστο node). Πήγαινε κατευθείαν στο μήνυμα για τον πάροχό σου παρακάτω.
Ο δικός σου server: συνδέσου με SSH και ρώτα τον web server τι πήγε στραβά.
# nginx: τα τελευταία σφάλματα, τα νεότερα στο τέλος
sudo tail -n 50 /var/log/nginx/error.log
# Apache (Debian/Ubuntu)
sudo tail -n 50 /var/log/apache2/error.log
Τυπικές γραμμές και τι σημαίνουν:
connect() to unix:/run/php/php8.3-fpm.sock failed (2: No such file or directory): το PHP-FPM δεν τρέχει ή η διαδρομή του socket είναι λάθος.connect() failed (111: Connection refused) while connecting to upstream: η θύρα του backend δεν ακούει.upstream prematurely closed connection: η διεργασία του backend κράσαρε ενώ απαντούσε, συχνά μοιραίο σφάλμα PHP ή έλλειψη μνήμης.upstream sent too big header: αύξησε τους buffers (δες παρακάτω).(11: Resource temporarily unavailable): όλοι οι workers του PHP-FPM είναι απασχολημένοι.
Διορθώσεις στον δικό σου server
1. Ξεκίνα την υπηρεσία που σταμάτησε
# βρες την έκδοση PHP-FPM που χρησιμοποιείς
systemctl list-units --type=service | grep -E 'php|fpm'
systemctl status php8.3-fpm
sudo systemctl start php8.3-fpm
# εφαρμογές Node.js ή Python που διαχειρίζεται το systemd
sudo systemctl restart myapp
Αν η υπηρεσία αρνείται να ξεκινήσει, ο λόγος βρίσκεται στο journalctl -u php8.3-fpm -n 50. Ο συνηθέστερος είναι ένας γεμάτος δίσκος (df -h), ο δεύτερος ένα συντακτικό σφάλμα σε ρύθμιση pool (sudo php-fpm8.3 -t).
2. Διόρθωσε το socket ή τη θύρα
Σύγκρινε σε τι συνδέεται το nginx με το πού ακούει το PHP-FPM:
grep -r fastcgi_pass /etc/nginx/sites-enabled/
grep -r '^listen' /etc/php/*/fpm/pool.d/
Τα δύο πρέπει να ταιριάζουν. Μετά από αλλαγή, δοκίμαζε πάντα τις ρυθμίσεις πριν από το reload:
sudo nginx -t && sudo systemctl reload nginx
Με Apache και PHP-FPM μέσω mod_proxy_fcgi, ο ίδιος έλεγχος ισχύει για τη γραμμή SetHandler "proxy:unix:/run/php/php8.3-fpm.sock|fcgi://localhost"· δοκίμασε με sudo apachectl configtest.
3. Δώσε χώρο στο PHP-FPM
Αν το αρχείο καταγραφής σφαλμάτων λέει ότι οι workers είναι απασχολημένοι ή server reached pm.max_children, ανέβασε το όριο στο αρχείο του pool (/etc/php/8.3/fpm/pool.d/www.conf):
pm = dynamic
pm.max_children = 20
pm.start_servers = 4
pm.min_spare_servers = 2
pm.max_spare_servers = 6
Κάθε worker χρειάζεται μνήμη (συχνά 30 έως 80 MB για το WordPress)· έλεγξε free -m πριν ανεβάσεις τον αριθμό, και ψάξε εξαρχής το αργό query ή το plugin που κρατά απασχολημένους τους workers.
4. Αύξησε τους buffers για μεγάλες κεφαλίδες
Στο μπλοκ server του nginx:
fastcgi_buffers 16 16k;
fastcgi_buffer_size 32k;
proxy_buffers 8 16k;
proxy_buffer_size 32k;
5. Ιδιαιτερότητες του WordPress
Ένα 502 αμέσως μετά από ενημέρωση plugin ή θέματος σημαίνει συνήθως ότι η PHP τελειώνει τη μνήμη ή πέφτει σε μοιραίο σφάλμα σε κάθε αίτημα. Μετονόμασε τον φάκελο του plugin μέσω SFTP ή SSH για να το απενεργοποιήσεις (wp-content/plugins/plugin-name σε plugin-name.off) και μετά φόρτωσε ξανά την ιστοσελίδα. Ανέβασε το memory_limit στο pool ή στο php.ini αν το journalctl δείχνει «Allowed memory size exhausted». Αν χρησιμοποιείς το WP-CLI: wp plugin deactivate plugin-name.
6. Πίσω από το Cloudflare
Έλεγξε ότι ο origin απαντά απευθείας: curl -I https://YOUR-SERVER-IP -H 'Host: example.com' -k. Αν αυτό λειτουργεί, το firewall του server μπορεί να μπλοκάρει τις περιοχές διευθύνσεων του Cloudflare ή η εγγραφή DNS στο Cloudflare δείχνει σε παλιά IP.
Όταν φταίει ο πάροχός σου
Σε shared hosting, δεν μπορείς να επανεκκινήσεις το PHP-FPM. Στείλε στον πάροχό σου αυτό, με την ώρα και το ακριβές σφάλμα:
Γεια σας, η ιστοσελίδα μου example.com επιστρέφει «502 Bad Gateway» από περίπου τις 14:30 UTC. Ένας εξωτερικός έλεγχος το επιβεβαιώνει· δεν έχω αλλάξει τίποτα από τη δική μου πλευρά. Μπορείτε να ελέγξετε τις διεργασίες PHP και τον web server στον λογαριασμό φιλοξενίας μου και να με ενημερώσετε όταν επανέλθει;
Πώς να αποτρέψεις το επόμενο
Ένα 502 είναι σχεδόν πάντα ένα backend που σταμάτησε ή υπερφορτώθηκε, και τα δύο φαίνονται πριν τα προσέξουν οι επισκέπτες: μια υπηρεσία PHP-FPM που σταμάτησε, μνήμη που τελειώνει, ένας δίσκος που γεμίζει. Η παρακολούθηση server με τον agent αναφέρει ακριβώς αυτά από το εσωτερικό του server, και οι έλεγχοι ιστοσελίδας απέξω πιάνουν το 502 τη στιγμή που εμφανίζεται. Στον δικό σου server, ένα Quick Fix μπορεί να επανεκκινήσει την υπηρεσία που σταμάτησε αφού περάσει ο έλεγχος των ρυθμίσεών της· αν η αιτία είναι βαθύτερη, αναλαμβάνει ένα Deep Fix όλο το εικοσιτετράωρο.
Τι κάνεις τώρα
Έλεγξέ το απ’ έξω
Έχει πέσει η ιστοσελίδα για όλους ή μόνο για σένα, και τι απαντά ο server; Δωρεάν, χωρίς εγγραφή.
Έλεγχος διαθεσιμότητας ιστοσελίδαςΈπεσε; Αναλαμβάνουμε.
Στον δικό σου server ή σε webspace με πρόσβαση SSH: ένα Quick Fix σε σταθερή τιμή για τις συνηθισμένες αιτίες, ένα Deep Fix με χρέωση σε τμήματα των 15 λεπτών για τις υπόλοιπες, όλο το εικοσιτετράωρο. Τιμή πριν παραγγείλεις.
Ζήτησε επισκευήΠερισσότεροι οδηγοί
- Η ιστοσελίδα σου έχει πέσει. Τι να κάνεις στα πρώτα 15 λεπτά.
- Έπεσε ο server: τι να ελέγξεις πρώτα και με ποια σειρά
- 503 Service Unavailable: υπερφόρτωση ή συντήρηση;
- 504 Gateway Timeout: τι σημαίνει και πώς να το διορθώσεις
- DNS_PROBE_FINISHED_NXDOMAIN: αιτίες και λύσεις
- ERR_CONNECTION_REFUSED: αιτίες και πώς να το διορθώσεις
- «Η σύνδεσή σας δεν είναι ιδιωτική»: η προειδοποίηση για το πιστοποιητικό SSL