Server Refused to Connect: что значит ошибка и как исправить

Server Refused to Connect означает, что браузер или приложение попытались подключиться к серверу, но сервер отклонил соединение. Обычно это происходит, когда нужный порт закрыт, веб-сервер не запущен, firewall блокирует доступ или сайт неправильно настроен.

Ошибка может появляться в Chrome, Firefox, Safari, cURL, приложениях, панелях хостинга и при подключении к API.

Quick Fix

  • Проверьте, работает ли сайт с другого устройства или сети.
  • Перезапустите роутер и очистите кэш браузера.
  • Если вы владелец сайта, проверьте статус веб-сервера: sudo systemctl status nginx или sudo systemctl status apache2
  • Проверьте, открыт ли нужный порт: sudo ss -tulpn
  • Для HTTPS проверьте порт 443: sudo ss -tulpn | grep :443
  • Для HTTP проверьте порт 80: sudo ss -tulpn | grep :80
  • Проверьте firewall: sudo ufw status
  • Проверьте DNS-записи домена.
  • Если сайт за Cloudflare, проверьте DNS, SSL/TLS mode и firewall rules.

Что значит Server Refused to Connect

Server Refused to Connect означает, что соединение до сервера дошло, но сервер не принял его. Это отличается от ошибки таймаута. При таймауте сервер не отвечает. При отказе в подключении сервер или сеть активно отклоняет запрос.

В браузере это может выглядеть так:

  • This site can’t be reached
  • example.com refused to connect
  • ERR_CONNECTION_REFUSED
  • Connection refused
  • Failed to connect to server
  • curl: (7) Failed to connect

На практике ошибка часто означает одно из двух: веб-сервер не слушает нужный порт или доступ к нему заблокирован.

Основные причины Server Refused to Connect

1. Веб-сервер не запущен

Если Nginx, Apache или другой веб-сервер остановлен, сайт не сможет принимать подключения. Это одна из самых частых причин ошибки.

Проверьте Nginx:

sudo systemctl status nginx

Проверьте Apache:

sudo systemctl status apache2

На CentOS, AlmaLinux или Rocky Linux Apache может называться httpd:

sudo systemctl status httpd

2. Порт 80 или 443 закрыт

Для обычного HTTP используется порт 80. Для HTTPS используется порт 443. Если эти порты закрыты, браузер не сможет подключиться к сайту.

Проверьте порт 80:

sudo ss -tulpn | grep :80

Проверьте порт 443:

sudo ss -tulpn | grep :443

Если команда ничего не показывает, значит сервер не слушает этот порт.

3. Firewall блокирует подключение

Firewall может блокировать входящие подключения даже тогда, когда веб-сервер работает правильно.

На Ubuntu/Debian проверьте UFW:

sudo ufw status

Откройте HTTP и HTTPS:

sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw reload

Если используется Nginx:

sudo ufw allow 'Nginx Full'

Если используется Apache:

sudo ufw allow 'Apache Full'

4. Порт заблокирован в панели VPS или хостинга

Некоторые провайдеры имеют отдельный firewall в панели управления. Даже если порт открыт внутри Linux, он может быть закрыт на уровне облачной сети.

Проверьте в панели хостинга разделы:

  • Firewall;
  • Security Groups;
  • Network Rules;
  • Cloud Firewall;
  • Inbound Rules;
  • Access Rules.

Для сайта должны быть разрешены входящие подключения:

TCP 80
TCP 443

5. Apache или Nginx настроен неправильно

Если в конфигурации веб-сервера нет правильного server block или VirtualHost, сайт может отказываться принимать соединения.

Для Nginx проверьте конфигурацию:

sudo nginx -t

Для Apache:

sudo apachectl configtest

Если есть ошибка, сервер обычно покажет файл и строку, где находится проблема.

6. Сайт слушает только localhost

Иногда сервис настроен так, что слушает только 127.0.0.1. В таком случае он доступен внутри сервера, но недоступен извне.

Проверьте:

sudo ss -tulpn

Если вы видите:

127.0.0.1:80
127.0.0.1:443

то внешние пользователи не смогут подключиться. Для публичного сайта сервер должен слушать:

0.0.0.0:80
0.0.0.0:443

или IPv6:

[::]:80
[::]:443

7. DNS указывает на неправильный IP

Если домен направлен на старый или неправильный сервер, пользователь будет подключаться не туда. На нужном сервере всё может быть настроено правильно, но ошибка всё равно будет появляться.

Проверьте A-запись:

dig example.com A

Проверьте AAAA-запись:

dig example.com AAAA

Если IPv6-запись AAAA указывает на сервер, где сайт не настроен, часть пользователей может видеть ошибку подключения.

8. SSL или HTTPS настроены неправильно

Если ошибка появляется только на HTTPS, проблема может быть в SSL-блоке, сертификате или порте 443.

Проверьте:

  • открыт ли порт 443;
  • есть ли SSL-сертификат;
  • правильно ли указан путь к fullchain.pem;
  • правильно ли указан путь к privkey.pem;
  • есть ли listen 443 ssl; в Nginx;
  • есть ли <VirtualHost *:443> в Apache.

9. Cloudflare не может подключиться к origin-серверу

Если сайт работает через Cloudflare, ошибка может быть связана с origin-сервером. Cloudflare должен иметь возможность подключиться к вашему серверу по HTTP или HTTPS.

Проверьте:

  • правильный IP в DNS-записи Cloudflare;
  • открыты ли порты 80 и 443 на сервере;
  • не блокирует ли firewall IP-адреса Cloudflare;
  • правильно ли выбран SSL/TLS mode;
  • работает ли сайт напрямую без Cloudflare.

10. Сервис или приложение упало

Если ошибка появляется не на сайте, а в приложении, API, Docker-контейнере или панели управления, причина может быть в остановленном сервисе.

Проверьте список процессов:

sudo systemctl --failed

И активные порты:

sudo ss -tulpn

Как исправить Server Refused to Connect

1. Проверьте сайт с другой сети

Сначала убедитесь, что проблема не только у вас. Откройте сайт:

  • с мобильного интернета;
  • с другого браузера;
  • с другого устройства;
  • через VPN;
  • из другой страны, если возможно.

Если сайт не открывается только у вас, проблема может быть в локальной сети, DNS-кэше, VPN, антивирусе или настройках браузера.

2. Очистите кэш браузера и DNS

Для обычного пользователя это быстрый шаг. Иногда браузер или система держит старый IP-адрес сайта.

На Windows откройте Command Prompt и выполните:

ipconfig /flushdns

На macOS:

sudo dscacheutil -flushcache; sudo killall -HUP mDNSResponder

В Chrome можно открыть:

chrome://net-internals/#dns

И очистить DNS-кэш.

3. Проверьте статус веб-сервера

Если вы владелец сайта, подключитесь к серверу по SSH.

Для Nginx:

sudo systemctl status nginx

Если сервер остановлен, запустите его:

sudo systemctl restart nginx

Для Apache:

sudo systemctl status apache2
sudo systemctl restart apache2

Если используется httpd:

sudo systemctl status httpd
sudo systemctl restart httpd

4. Проверьте конфигурацию Nginx или Apache

Если веб-сервер не запускается, проверьте конфигурацию.

Nginx:

sudo nginx -t

Apache:

sudo apachectl configtest

Если есть ошибка, не перезапускайте сервер вслепую. Откройте файл, который указан в сообщении, исправьте строку и снова выполните тест.

5. Откройте порты 80 и 443

Для Ubuntu/Debian с UFW:

sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw reload
sudo ufw status

Для CentOS/AlmaLinux/Rocky Linux с firewalld:

sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
sudo firewall-cmd --reload
sudo firewall-cmd --list-all

6. Проверьте, кто слушает нужный порт

Выполните:

sudo ss -tulpn | grep -E ':80|:443'

Если порт 80 или 443 слушает не тот сервис, может быть конфликт.

Например, если Nginx занимает 443, Apache не сможет использовать этот порт. В таком случае нужно выбрать одну схему:

  • только Nginx;
  • только Apache;
  • Nginx как reverse proxy перед Apache.

7. Проверьте DNS домена

Убедитесь, что домен указывает на правильный IP сервера.

dig example.com A
dig www.example.com A

Если используется IPv6:

dig example.com AAAA

Если AAAA-запись неправильная, удалите её или настройте сайт на IPv6-сервере.

8. Проверьте SSL-конфигурацию

Для Nginx в HTTPS-блоке должно быть:

listen 443 ssl;
server_name example.com www.example.com;

ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;

Для Apache:

<VirtualHost *:443>
    ServerName example.com
    SSLEngine on
    SSLCertificateFile /etc/letsencrypt/live/example.com/fullchain.pem
    SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem
</VirtualHost>

После проверки:

sudo nginx -t
sudo systemctl reload nginx

Или для Apache:

sudo apachectl configtest
sudo systemctl reload apache2

9. Проверьте Cloudflare

Если домен подключён к Cloudflare, временно переключите DNS-запись с оранжевого облака на серое. Так вы проверите сайт напрямую.

Проверьте:

  • DNS-запись A указывает на правильный IP;
  • SSL/TLS mode стоит Full или Full (strict);
  • на сервере установлен SSL-сертификат;
  • firewall не блокирует Cloudflare;
  • порт 443 открыт на origin-сервере.

Если после отключения прокси Cloudflare сайт тоже не открывается, проблема почти точно на сервере или в DNS.

10. Посмотрите логи

Логи часто показывают реальную причину быстрее, чем догадки.

Nginx:

sudo tail -n 100 /var/log/nginx/error.log

Apache:

sudo tail -n 100 /var/log/apache2/error.log

Systemd:

sudo journalctl -xe

Для конкретной службы:

sudo journalctl -xeu nginx
sudo journalctl -xeu apache2

Advanced Troubleshooting

Connection refused только на HTTPS

Если HTTP работает, а HTTPS нет, почти всегда проблема в порте 443 или SSL-конфигурации.

Проверьте:

sudo ss -tulpn | grep :443
sudo ufw status
sudo nginx -t

Для Apache:

sudo apachectl configtest

Если порт 443 не слушается, добавьте HTTPS-блок в Nginx или VirtualHost в Apache.

Connection refused только на HTTP

Если HTTPS работает, а HTTP нет, возможно, порт 80 закрыт или нет редиректа с HTTP на HTTPS.

Проверьте:

sudo ss -tulpn | grep :80
sudo ufw allow 80/tcp

Для Nginx добавьте редирект:

server {
    listen 80;
    server_name example.com www.example.com;
    return 301 https://$host$request_uri;
}

Connection refused после миграции сайта

После переноса сайта часто остаются старые DNS-записи. Также новый сервер может не иметь открытых портов или SSL.

Проверьте:

  • A-запись домена;
  • AAAA-запись;
  • открыты ли 80 и 443;
  • запущен ли веб-сервер;
  • выпущен ли SSL для нового сервера;
  • не остался ли старый IP в Cloudflare.

Connection refused в Docker

Если сайт или приложение работает в Docker, проверьте публикацию портов.

docker ps

В колонке PORTS должно быть что-то вроде:

0.0.0.0:80->80/tcp
0.0.0.0:443->443/tcp

Если порт не опубликован, контейнер может работать, но снаружи подключение будет отклонено.

Connection refused в API

Если ошибка возникает при подключении к API, проверьте:

  • правильный URL;
  • правильный порт;
  • работает ли backend-сервис;
  • разрешён ли внешний доступ;
  • не слушает ли API только localhost;
  • не блокирует ли firewall внешний IP.

Чем Server Refused to Connect отличается от Timeout

Эти ошибки похожи, но причина разная.

Ошибка Что означает Частая причина
Server Refused to Connect Сервер отклонил подключение Порт закрыт, сервис не слушает, firewall отклоняет
Connection Timed Out Сервер не ответил вовремя Сеть недоступна, firewall молча блокирует, сервер завис
DNS_PROBE_FINISHED_NXDOMAIN Домен не найден Ошибка DNS или домен не существует
SSL Error Проблема с защищённым соединением Сертификат, HTTPS-конфигурация, Cloudflare

Как предотвратить Server Refused to Connect

  • Включите автозапуск веб-сервера: sudo systemctl enable nginx или sudo systemctl enable apache2.
  • Всегда проверяйте конфигурацию перед перезапуском.
  • Держите порты 80 и 443 открытыми.
  • Проверяйте firewall после установки VPS.
  • Не оставляйте неправильные AAAA-записи.
  • Следите за SSL-сертификатами.
  • Не включайте Cloudflare, пока сайт не работает напрямую.
  • После миграции проверяйте DNS и IP сервера.
  • Настройте мониторинг доступности сайта.

Когда обращаться в поддержку хостинга

Обратитесь в поддержку, если:

  • у вас нет SSH-доступа;
  • сайт работает в панели хостинга, но не открывается снаружи;
  • порт 80 или 443 закрыт на уровне провайдера;
  • вы не можете изменить firewall;
  • после миграции домен указывает на правильный IP, но сайт не открывается;
  • сервер не запускает Apache или Nginx после перезагрузки;
  • Cloudflare показывает 522, 525 или 526.

Перед обращением подготовьте домен, IP сервера, скрин ошибки и результаты команд:

sudo systemctl status nginx
sudo systemctl status apache2
sudo ss -tulpn | grep -E ':80|:443'
sudo ufw status

FAQ

Что значит Server Refused to Connect?

Это значит, что сервер отклонил попытку подключения. Обычно причина в закрытом порте, остановленном веб-сервере, firewall, неправильном DNS или ошибке конфигурации.

Как исправить ERR_CONNECTION_REFUSED?

Проверьте, запущен ли веб-сервер, слушает ли он порт 80 или 443, открыт ли порт в firewall и правильно ли домен указывает на IP сервера.

Почему сайт отказывается подключаться только по HTTPS?

Скорее всего, закрыт порт 443, отсутствует HTTPS-конфигурация или неправильно установлен SSL-сертификат.

Может ли Cloudflare вызвать Server Refused to Connect?

Да. Если Cloudflare направляет трафик на неправильный IP, origin-сервер закрывает порт 443 или firewall блокирует Cloudflare, сайт может не открываться.

Почему localhost работает, а сайт снаружи нет?

Сервис может слушать только 127.0.0.1, а не публичный IP. Также внешний доступ может блокировать firewall или правила VPS-провайдера.

Вывод

Server Refused to Connect чаще всего связан не с браузером, а с сервером. Проверьте, запущен ли Apache или Nginx, открыт ли порт 80/443, правильно ли настроен firewall, DNS, SSL и Cloudflare.

Лучший порядок действий: сначала проверить статус веб-сервера, затем порты, firewall, DNS и логи. Так вы быстро поймёте, где именно сервер отказывается принимать подключение.