ERR_CONNECTION_REFUSED: αιτίες και πώς να το διορθώσεις
· 2 λεπτά ανάγνωσης
Τι σημαίνει το σφάλμα
Ο browser βρήκε τη διεύθυνση του server, έστειλε αίτημα σύνδεσης στη θύρα 443 (ή 80) και ο server απάντησε «όχι»: ένα TCP reset, που στέλνει το λειτουργικό σύστημα όταν κανένα πρόγραμμα δεν ακούει σε αυτή τη θύρα. Το Chrome δείχνει ERR_CONNECTION_REFUSED («Δεν είναι δυνατή η πρόσβαση σε αυτόν τον ιστότοπο»), το Firefox «Αδυναμία σύνδεσης», το Safari «Το Safari δεν μπορεί να συνδεθεί με τον διακομιστή».
Αυτό διαφέρει από ένα timeout (δεν απαντά τίποτα, συνήθως ένα firewall που ρίχνει πακέτα ή ένας server που είναι σβηστός) και από το DNS_PROBE_FINISHED_NXDOMAIN (το όνομα δεν επιλύεται). Μια απορριφθείσα σύνδεση σημαίνει: το μηχάνημα λειτουργεί και είναι προσβάσιμο, αλλά ο web server πάνω του δεν τρέχει, ακούει σε άλλη θύρα ή διεύθυνση, ή μπλοκάρεται από firewall που απορρίπτει αντί να ρίχνει πακέτα.
Συνηθισμένες αιτίες
- Ο web server έχει σταματήσει. Το nginx ή το Apache κράσαρε, απέτυχε να ξεκινήσει μετά από αλλαγή ρυθμίσεων ή σταμάτησε από μια ενημέρωση. Η συνηθέστερη αιτία με διαφορά.
- Ο web server ακούει σε λάθος διεύθυνση ή θύρα. Μετά από αλλαγή στις οδηγίες
listen, το nginx δεσμεύεται μόνο στο127.0.0.1ή μόνο σε IPv4 ενώ η εγγραφή DNS δείχνει σε διεύθυνση IPv6. - Ένα firewall απορρίπτει τη θύρα.
ufw,firewalldή μια ομάδα ασφαλείας cloud με κανόναrejectγια τις 80/443, συχνά αφού κάποιος «θωράκισε» τον server. - Νέος server χωρίς web server. Η εγγραφή DNS δείχνει ήδη στη νέα IP, αλλά το nginx δεν είναι εγκατεστημένο ή δεν έχει ξεκινήσει ακόμη.
- Δεν έχει ρυθμιστεί το HTTPS. Η θύρα 80 λειτουργεί, η θύρα 443 δεν έχει listener, και ο browser (ή μια εγγραφή HSTS) επιμένει στο HTTPS.
- Τοπικές αιτίες από την πλευρά του επισκέπτη. Μια ρύθμιση proxy που δείχνει σε νεκρό proxy, ένα VPN, το «web shield» ενός antivirus, μια εγγραφή στο αρχείο hosts ή μια επέκταση του browser.
Αν είσαι επισκέπτης
- Δοκίμασε την ιστοσελίδα σε ιδιωτικό παράθυρο και με άλλον browser, κάτι που αποκλείει επεκτάσεις και cache.
- Έλεγξε τις ρυθμίσεις proxy: Windows «Ρυθμίσεις proxy», macOS Δίκτυο > Για προχωρημένους > Proxies. Απενεργοποίησε έναν χειροκίνητο proxy που δεν χρησιμοποιείς.
- Απενεργοποίησε για λίγο το VPN και την προστασία ιστού του antivirus.
- Καθάρισε το DNS (
ipconfig /flushdns,sudo dscacheutil -flushcache) μήπως η cache σου κρατά παλιά διεύθυνση μιας ιστοσελίδας που μετακινήθηκε. - Δοκίμασε μία φορά
http://αντί γιαhttps://· αν λειτουργεί, το HTTPS της ιστοσελίδας είναι χαλασμένο και πρέπει να το διορθώσει ο ιδιοκτήτης.
Αν είναι η δική σου ιστοσελίδα: έλεγξε πρώτα
Τρέξε τον έλεγχο διαθεσιμότητας ιστοσελίδας. Το «Connection refused» απέξω επιβεβαιώνει ότι αρνείται ο ίδιος ο server. Μετά συνδέσου με SSH (το SSH να λειτουργεί ενώ η ιστοσελίδα αρνείται είναι από μόνο του ισχυρή ένδειξη: ο server λειτουργεί, ο web server όχι).
# τρέχει ο web server;
systemctl status nginx
systemctl status apache2
# τι ακούει στις 80 και 443;
sudo ss -tlnp | grep -E ':80 |:443 '
# κανόνες firewall
sudo ufw status verbose
sudo firewall-cmd --list-all
sudo nft list ruleset | grep -E 'dport (80|443)'
Αν το ss δεν δείχνει τίποτα στη 443, ο web server έχει πέσει ή δεν έχει ρυθμιστεί γι’ αυτήν. Αν δείχνει 127.0.0.1:443 αντί για 0.0.0.0:443 ή *:443, ακούει μόνο τοπικά.
Διορθώσεις στον δικό σου server
1. Ξεκίνα τον web server και διάβασε γιατί σταμάτησε
sudo systemctl start nginx
systemctl status nginx
sudo journalctl -u nginx -n 50
Αν αποτυγχάνει να ξεκινήσει, οι λόγοι είναι σχεδόν πάντα ένας από αυτούς:
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use): ένα άλλο πρόγραμμα κρατά τη θύρα (είναι εγκατεστημένα και Apache και nginx, ή μια παλιά διεργασία). Τοsudo ss -tlnp | grep :80την κατονομάζει· σταμάτα αυτήν που δεν θέλεις.[emerg] unknown directiveήunexpected "}": συντακτικό σφάλμα σε αρχείο ρυθμίσεων. Τοsudo nginx -tεμφανίζει το αρχείο και τη γραμμή.cannot load certificate: ένα αρχείο πιστοποιητικού διαγράφηκε ή ανανεώθηκε σε άλλη διαδρομή. Έλεγξε τις γραμμέςssl_certificateμε ό,τι υπάρχει στον δίσκο.Too many open filesή γεμάτος δίσκος:df -h,df -i.
Apache: sudo apachectl configtest και μετά sudo journalctl -u apache2 -n 50. Ισχύουν οι ίδιες κατηγορίες· το AH00558 (could not determine server name) είναι μόνο προειδοποίηση, όχι η αιτία.
Δοκίμαζε πάντα πριν κάνεις reload και προτίμησε reload αντί για restart όταν είναι δυνατό:
sudo nginx -t && sudo systemctl reload nginx
sudo apachectl configtest && sudo systemctl reload apache2
2. Άκου στη σωστή διεύθυνση
Στο μπλοκ server του nginx χρειάζονται και τα δύο για IPv4 και IPv6:
listen 80;
listen [::]:80;
listen 443 ssl;
listen [::]:443 ssl;
Αν το DNS έχει εγγραφή AAAA αλλά ο server δεν ακούει σε IPv6 (ή δεν έχει συνδεσιμότητα IPv6), οι επισκέπτες σε IPv6 παίρνουν απορριφθείσα σύνδεση ενώ όλοι οι άλλοι είναι εντάξει. Είτε κάνε τον να ακούει, είτε αφαίρεσε την εγγραφή AAAA.
3. Άνοιξε το firewall
# ufw (Debian/Ubuntu)
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
# firewalld (οικογένεια RHEL)
sudo firewall-cmd --permanent --add-service=http --add-service=https
sudo firewall-cmd --reload
Σε έναν cloud server, έλεγξε και την ομάδα ασφαλείας ή το firewall δικτύου του παρόχου στον πίνακα ελέγχου· ένας κανόνας εκεί είναι αόρατος από μέσα από τον server.
4. Ρύθμισε το HTTPS αν απαντά μόνο η θύρα 80
sudo apt install certbot python3-certbot-nginx
sudo certbot --nginx -d example.com -d www.example.com
Το Certbot προσθέτει το μπλοκ server της 443 και την ανακατεύθυνση. Μετά έλεγξε με τον έλεγχο SSL ότι η αλυσίδα είναι πλήρης.
5. Μετά από μετακίνηση server
Βεβαιώσου ότι ο web server στο νέο μηχάνημα είναι εγκατεστημένος, ρυθμισμένος για το domain και ξεκινημένος πριν αλλάξεις το DNS. Αν το έχεις ήδη αλλάξει: εγκατέστησέ τον και ξεκίνα τον τώρα, ή στρέψε ξανά την εγγραφή στον παλιό server μέχρι να είναι έτοιμος ο νέος.
Όταν φταίει ο πάροχός σου
Σε shared hosting, μια απορριφθείσα σύνδεση σημαίνει ότι ο web server του παρόχου έχει πέσει για το node σου, ή σε μετέφεραν σε νέα IP χωρίς να ενημερώσουν το DNS. Στείλε:
Γεια σας, η ιστοσελίδα μου example.com επιστρέφει «connection refused» στις θύρες 80 και 443 από περίπου τις 20:15 UTC. Το domain επιλύεται στο 203.0.113.10. Δεν έχω αλλάξει τίποτα στον λογαριασμό μου. Έχει πέσει ο web server σε αυτό το μηχάνημα ή η ιστοσελίδα μου μετακινήθηκε σε άλλη διεύθυνση;
Πώς να αποτρέψεις το επόμενο
Μια απορριφθείσα σύνδεση είναι σχεδόν πάντα ένας web server που σταμάτησε, και μια υπηρεσία που σταμάτησε είναι ακριβώς αυτό που ένας έλεγχος θύρας και ένας έλεγχος ιστοσελίδας απέξω προσέχουν μέσα σε ένα λεπτό. Στον δικό σου server, ο agent server σε ειδοποιεί όταν σταματά το nginx ή το Apache, και ένα Quick Fix το επανεκκινεί αφού περάσει ο έλεγχος των ρυθμίσεών του, σε σταθερή τιμή, χωρίς να συνδεθεί κανείς στις 3 τα ξημερώματα. Αν είναι χαλασμένες οι ίδιες οι ρυθμίσεις, ένα Deep Fix τις επισκευάζει.
Τι κάνεις τώρα
Έλεγξέ το απ’ έξω
Έχει πέσει η ιστοσελίδα για όλους ή μόνο για σένα, και τι απαντά ο server; Δωρεάν, χωρίς εγγραφή.
Έλεγχος διαθεσιμότητας ιστοσελίδαςΈπεσε; Αναλαμβάνουμε.
Στον δικό σου server ή σε webspace με πρόσβαση SSH: ένα Quick Fix σε σταθερή τιμή για τις συνηθισμένες αιτίες, ένα Deep Fix με χρέωση σε τμήματα των 15 λεπτών για τις υπόλοιπες, όλο το εικοσιτετράωρο. Τιμή πριν παραγγείλεις.
Ζήτησε επισκευήΠερισσότεροι οδηγοί
- Η ιστοσελίδα σου έχει πέσει. Τι να κάνεις στα πρώτα 15 λεπτά.
- Έπεσε ο server: τι να ελέγξεις πρώτα και με ποια σειρά
- 502 Bad Gateway: αιτίες και πώς να το διορθώσεις
- 503 Service Unavailable: υπερφόρτωση ή συντήρηση;
- 504 Gateway Timeout: τι σημαίνει και πώς να το διορθώσεις
- DNS_PROBE_FINISHED_NXDOMAIN: αιτίες και λύσεις
- «Η σύνδεσή σας δεν είναι ιδιωτική»: η προειδοποίηση για το πιστοποιητικό SSL