Что такое хост, hostname и localhost: простыми словами и с командами
12 мин чтения
Что такое хост, hostname и localhost: простыми словами и с командами

Что такое хост, hostname и localhost: простыми словами и с командами

Слово «хост» встречается в логах, настройках роутера, заголовках HTTP и файле hosts — и каждый раз означает чуть разное. Разбираем, чем хост отличается от сервера, домена и хостинга, как устроен hostname, что происходит при обращении к localhost, как на одном IP живут сотни сайтов и какими командами это проверить.

Хост — любое устройство, у которого есть IP-адрес в сети: сервер, ноутбук, телефон, принтер, виртуальная машина. Hostname — текстовое имя этого устройства, по которому к нему обращаются вместо адреса. Localhost — зарезервированное имя самого себя, всегда указывающее на loopback-адрес 127.0.0.1 (IPv4) или ::1 (IPv6). По RFC 1122 хост — конечный потребитель сетевых услуг, в отличие от маршрутизатора, который только передаёт чужие пакеты. Сервер — роль хоста, а не синоним: один хост может быть сервером для одних соединений и клиентом для других.

Чем хост отличается от сервера, домена, FQDN и IP-адреса

Хост — устройство, IP-адрес — его номер в сети, hostname — его имя, домен — пространство, где имя зарегистрировано, сервер — то, что хост делает. В простом случае всё совпадает: сайт site.ru живёт на одном хосте с одним адресом и именем. Различия становятся важны, как только имён или адресов больше одного.

Термин Что это Пример Чем отличается
Хост Устройство с IP-адресом VPS в дата-центре, ноутбук, роутер Физическая или виртуальная сущность; у неё может быть несколько адресов и имён
IP-адрес Числовой адрес интерфейса хоста 203.0.113.10, 2001:db8::1 Принадлежит интерфейсу, а не устройству: у хоста с двумя сетевыми картами два адреса
Hostname Имя хоста, которое он сам о себе знает web-01 Хранится на самом устройстве; в DNS его может вообще не быть
Домен Зарегистрированная зона в иерархии DNS site.ru Может не указывать ни на один хост (только MX-записи для почты) или указывать на десятки
FQDN Полное доменное имя хоста: hostname + домен web-01.site.ru. Однозначно во всём интернете; формально заканчивается точкой (корень DNS)
Сервер Роль: программа или хост, который принимает запросы nginx на web-01 Один хост может держать десять серверов (веб, БД, SSH) на разных портах
Виртуальный хост Сайт внутри веб-сервера, выбираемый по имени server_name site.ru в nginx Не устройство: сотни vhost делят один IP и один процесс

Как сайт получает адрес и почему у одного домена их бывает несколько — в статье об IP-адресе сайта. Здесь важно одно: адрес привязан к интерфейсу, имя — к записи в DNS или локальном файле, и связь между ними поддерживается вручную.

Каким должен быть hostname: правила RFC 952 и RFC 1123

Hostname состоит из латинских букв, цифр и дефиса, не начинается и не заканчивается дефисом, регистр не важен. Правила заданы RFC 952 (1985) и смягчены RFC 1123 (1989): раньше имя не могло начинаться с цифры и было ограничено 24 символами, теперь первый символ может быть цифрой, а метка — до 63 символов.

Ограничение Значение Источник
Допустимые символы A–Z, 0–9, дефис; точка только как разделитель меток RFC 952
Первый символ Буква или цифра (в RFC 952 — только буква) RFC 1123, п. 2.1
Последний символ Не дефис и не точка RFC 952
Длина одной метки До 63 символов RFC 1034, RFC 1123
Длина FQDN До 255 байт RFC 1034
Hostname в Linux До 64 символов, hostnamectl требует строчные буквы man hostnamectl
Имя компьютера Windows (NetBIOS) До 15 символов; только цифры — нельзя Документация Microsoft

В Linux с systemd у хоста три имени: статическое (в /etc/hostname, задаёт администратор), транзиентное (получено от DHCP, игнорируется при наличии статического) и «красивое» (любая строка для интерфейса). Команда hostname показывает имя, которое сейчас знает ядро; hostnamectl — все три.

$ hostname
web-01
$ hostname -f
web-01.site.ru
$ hostname -I
203.0.113.10 10.0.0.5

$ hostnamectl
# пример вывода
   Static hostname: web-01
         Icon name: computer-vm
           Chassis: vm
  Operating System: Ubuntu 24.04.3 LTS
            Kernel: Linux 6.8.0-45-generic
      Architecture: x86-64

# сменить имя без перезагрузки (меняет все три вида имени)
$ sudo hostnamectl hostname web-02
# только статическое
$ sudo hostnamectl hostname --static web-02

Ключ -f не читает настройку, а ищет короткое имя через резолвер (/etc/hosts, затем DNS), чтобы получить полное. Если записи нет, hostname -f вернёт «Name or service not known», хотя короткое имя задано.

Как имя хоста превращается в IP-адрес: /etc/hosts, nsswitch и DNS

Операционная система ищет адрес по имени в порядке, заданном строкой hosts в файле /etc/nsswitch.conf: обычно сначала локальный файл /etc/hosts (источник files), затем DNS. Если имя нашлось в файле, до DNS запрос не доходит — поэтому одной строкой в hosts можно «перенаправить» сайт на другой адрес только для этого компьютера.

$ grep '^hosts:' /etc/nsswitch.conf
hosts:          files dns

$ cat /etc/hosts
# пример вывода на Ubuntu
127.0.0.1       localhost
127.0.1.1       web-01.site.ru web-01
203.0.113.20    site.ru www.site.ru
::1             ip6-localhost ip6-loopback

# getent идёт тем же путём, что и приложения: files, потом dns
$ getent hosts site.ru
203.0.113.20    site.ru www.site.ru
$ getent hosts localhost
127.0.0.1       localhost

# Windows: тот же файл лежит здесь
C:\Windows\System32\drivers\etc\hosts

Запись 127.0.1.1 — соглашение Debian и Ubuntu: она даёт хосту FQDN без сети и DNS, чтобы hostname -f и sudo не ломались. Строка для site.ru — ручное переопределение: пока она есть, браузер на этой машине пойдёт на 203.0.113.20, что бы ни говорил DNS. Как работает цепочка резолверов и почему изменения видны не сразу — в статье о том, как работает DNS.

Запись в hosts Зачем Когда убрать
203.0.113.20 site.ru www.site.ru Проверить сайт на новом сервере до смены DNS-записи: браузер уже идёт на новый IP, посетители — ещё на старый Сразу после смены DNS, иначе вы не увидите проблему, которую видят остальные
127.0.0.1 app.local api.local Dev-окружение: несколько локальных сайтов с разными именами на одном компьютере Не мешает; но .local конфликтует с mDNS — лучше .test
0.0.0.0 ads.example.com Блокировка домена: запрос уходит в никуда и сразу отбивается Когда домен понадобился; заблокировать отдельный URL так нельзя
10.0.0.5 db-01 redis-01 Внутренние имена в частной сети (RFC 1918: 10/8, 172.16/12, 192.168/16) без своего DNS Когда серверов больше пяти: файлы расходятся, нужен внутренний DNS
Файл hosts обходят не все программы

dig и nslookup спрашивают DNS-сервер напрямую и /etc/hosts не читают. «dig показывает старый адрес, а curl идёт на новый» — нормальная картина при записи в hosts. Что видит приложение, показывает getent hosts (Linux) или ping (все системы).

Чем отличаются localhost, 127.0.0.1, ::1 и 0.0.0.0

Localhost — имя, 127.0.0.1 и ::1 — адреса loopback-интерфейса, а 0.0.0.0 — не адрес назначения, а обозначение «все интерфейсы этого хоста» при запуске сервера. По RFC 6761 резолвер обязан переводить localhost в loopback-адрес, не обращаясь к DNS; по RFC 1122 пакеты с адресами 127.0.0.0/8 не должны покидать хост, а 0.0.0.0 («этот хост в этой сети») нельзя использовать как адрес назначения.

Что Тип Куда ведёт Где встречается
localhost Имя (RFC 6761) В 127.0.0.1 или ::1 — что первым вернёт резолвер Адресная строка браузера, строки подключения к БД
127.0.0.1 IPv4-адрес loopback Только в этот же хост; вся сеть 127.0.0.0/8 — loopback bind у локальных сервисов, /etc/hosts
::1 IPv6-адрес loopback То же, но по IPv6; в URL пишется как http://[::1]:8080/ Современные системы резолвят localhost сначала в ::1
0.0.0.0 «Любой адрес» при bind (INADDR_ANY) Сервер принимает соединения на всех интерфейсах, включая внешние Вывод ss -ltn, конфиги Docker и Node.js

Отсюда симптом «сайт открывается на localhost, а по внешнему IP — нет». Сервис слушает 127.0.0.1: соединения с loopback он принимает, а на пакеты, пришедшие на внешний интерфейс, ядро отвечает RST — снаружи это ERR_CONNECTION_REFUSED. Проверяется одной командой:

$ ping -c 2 localhost
# пример вывода: имя разрешилось в ::1, DNS не участвовал
PING localhost(localhost (::1)) 56 data bytes
64 bytes from localhost (::1): icmp_seq=1 ttl=64 time=0.041 ms
64 bytes from localhost (::1): icmp_seq=2 ttl=64 time=0.052 ms

$ ss -ltn
# пример вывода
State   Recv-Q  Send-Q  Local Address:Port   Peer Address:Port
LISTEN  0       511     0.0.0.0:80           0.0.0.0:*
LISTEN  0       511     127.0.0.1:8000       0.0.0.0:*
LISTEN  0       128     [::]:22              [::]:*

# порт 80 доступен снаружи, 8000 — только с этого хоста,
# 22 слушает на всех адресах IPv6 (и IPv4 через dual-stack)

Local Address — адрес, к которому привязан слушающий сокет. 0.0.0.0:80 — nginx примет соединение с любого интерфейса; 127.0.0.1:8000 — приложение доступно только через loopback, снаружи — лишь через прокси на том же хосте. Что такое порт и почему у одного адреса их 65 535 — в статье о портах.

Заголовок Host и SNI: как на одном IP живут сотни сайтов

Один хост с одним IP обслуживает много сайтов потому, что браузер называет нужный сайт дважды: в TLS-рукопожатии через расширение SNI (RFC 6066) и в HTTP-запросе через заголовок Host (в HTTP/2 и HTTP/3 — псевдозаголовок :authority). По RFC 9110 Host обязателен в каждом запросе HTTP/1.1; запрос без него или с двумя разными Host сервер обязан отклонить кодом 400.

По документации nginx, сервер сверяет Host со списком server_name и, если совпадений нет или заголовка нет вообще, отдаёт запрос серверу по умолчанию для этого порта — первому в конфигурации или помеченному default_server. Отсюда знакомые эффекты:

Ситуация Что видит клиент Почему
Открыли сайт по голому IP Страница-заглушка хостинга или чужой сайт с того же сервера Host: 203.0.113.10 не совпал ни с одним server_name — сработал дефолтный vhost
Открыли по IP через HTTPS Предупреждение о сертификате: он выписан на другое имя Без совпадения SNI сервер отдал сертификат дефолтного vhost
DNS уже указывает на сервер, vhost ещё не создан 404, «Welcome to nginx!» или соседний сайт Имя резолвится, TCP-соединение есть, но веб-сервер не знает такого сайта
Запрос без заголовка Host 400 Bad Request; в nginx с server_name "" и return 444 — обрыв без ответа Требование RFC 9110 для HTTP/1.1; 444 — нестандартный код nginx, закрывающий соединение

Поэтому проверять сайт нужно по имени: ответ на IP говорит лишь о том, что хост жив и веб-сервер запущен. Подменить имя для теста можно самим curl, без правки hosts:

# HTTP: подставить нужный Host при обращении по IP
$ curl -sI -H "Host: site.ru" http://203.0.113.20/
HTTP/1.1 200 OK
Server: nginx
Content-Type: text/html; charset=utf-8

# тот же IP без Host — дефолтный vhost
$ curl -sI http://203.0.113.20/
HTTP/1.1 404 Not Found

# HTTPS: заголовок Host не меняет SNI, нужен --resolve
$ curl -sI --resolve site.ru:443:203.0.113.20 https://site.ru/
HTTP/2 200

Для HTTPS одного заголовка Host мало: имя должно уйти ещё и в SNI до HTTP-запроса, иначе сервер выберет сертификат по умолчанию и проверка провалится на TLS. Ключ --resolve заставляет curl считать, что site.ru резолвится в указанный адрес, — и SNI, и Host остаются правильными.

Какими командами проверить хост в Linux, macOS и Windows

Диагностике нужны четыре ответа: как хост называет себя, во что имя резолвится локально, что говорит DNS и что слушает хост. Команды на сентябрь 2026:

Вопрос Linux macOS Windows
Своё имя hostname, hostnamectl hostname, scutil --get HostName hostname, ipconfig /all (строка Host Name)
Как имя резолвится локально (с учётом hosts) getent hosts имя dscacheutil -q host -a name имя ping -n 1 имя, Resolve-DnsName имя
Что говорит DNS (мимо hosts) dig +short имя, nslookup имя dig +short имя nslookup имя
Что слушает хост ss -ltn lsof -iTCP -sTCP:LISTEN -P netstat -ano | findstr LISTENING
$ dig +short site.ru
203.0.113.20
$ dig +short -x 203.0.113.20
web-01.site.ru.

$ nslookup site.ru
# пример вывода
Server:         192.168.1.1
Non-authoritative answer:
Name:   site.ru
Address: 203.0.113.20

C:\> hostname
DESKTOP-7K2P9QA

C:\> ipconfig /all
# пример вывода, фрагмент
Windows IP Configuration
   Host Name . . . . . . . . . . . . : DESKTOP-7K2P9QA
   Primary Dns Suffix  . . . . . . . : corp.example
Ethernet adapter Ethernet:
   IPv4 Address. . . . . . . . . . . : 192.168.1.42(Preferred)
   DNS Servers . . . . . . . . . . . : 192.168.1.1

Если dig и getent расходятся — виноват локальный hosts или кэш. Если PTR возвращает имя другого сервера — хост переехал, а обратную зону не обновили. Строка «Server: 192.168.1.1» в nslookup означает, что ответил роутер, а не авторитетный сервер зоны: до истечения TTL он может отдавать устаревший адрес.

Почему хостинг — это не хост

Хостинг — услуга размещения сайта на чужом хосте; хост — сам компьютер. Слова однокоренные (host по-английски ещё и «принимающая сторона»), отсюда путаница в заявках: «у нас упал хост» может означать сервер целиком, один сайт на нём или аккаунт у провайдера.

На виртуальном хостинге один физический хост делят сотни клиентов: у всех сайтов общий IP, различаются они только именем в Host и SNI. На VPS клиент получает собственную виртуальную машину с отдельным IP и своим hostname. В панелях провайдеров «хостнейм сервера» — имя, под которым VPS представляется в сети и в PTR-записи. Уточняйте, о каком значении речь, прежде чем что-либо перезагружать.

Как следить, что хост доступен по имени, а не только по адресу

Правило мониторинга: проверять то, что видит посетитель, — имя, а не IP. Хост может отвечать на ping по адресу, а сайт не открываться: сменилась A-запись, слетел vhost, сертификат выписан на другое имя.

Пруфен обращается к хосту по имени с 20 точек мониторинга в России, Беларуси, Казахстане и Испании, так что резолвинг и ответ vhost проверяются каждым запуском. DNS-проверка сравнивает ответ с ожидаемым значением и ловит смену адреса или подмену записи; HTTP-проверка отправляет запрос с правильными Host и SNI и фиксирует код ответа именно вашего виртуального хоста, а не дефолтной заглушки сервера.

Смена адреса или пропавший vhost видны до жалоб пользователей

Пруфен выполняет проверки с интервалом от 2 минут и присылает уведомление в Email, Telegram или Макс, когда сайт перестал отвечать по имени, и второе — когда восстановился. Если ресурс так и не поднялся, подключается голосовой звонок. Бесплатный план включает 5 проверок — хватит, чтобы держать под наблюдением DNS домена, главную страницу и API.

Частые вопросы

Хост и сервер — одно и то же?

Нет. Хост — устройство с IP-адресом, сервер — роль в конкретном соединении: тот, кто принимает запросы. Ваш ноутбук становится сервером, когда вы запускаете на нём python -m http.server, и остаётся клиентом для сайтов, которые открываете в браузере. На одном хосте обычно работает несколько серверов — веб, база данных, SSH — каждый на своём порту.

Почему localhost открывается, а по IP-адресу — нет?

Сервис привязан к 127.0.0.1 и принимает соединения только через loopback. Посмотрите колонку Local Address в ss -ltn (Linux) или netstat -ano (Windows): 127.0.0.1:порт означает «только с этого хоста», 0.0.0.0:порт — «со всех интерфейсов». Исправляется параметром bind или listen в конфигурации приложения; после этого проверьте файрвол — он часто вторая причина того же симптома.

Можно ли переименовать хост без перезагрузки?

В Linux с systemd — да: hostnamectl hostname новое-имя сразу меняет и /etc/hostname, и имя в ядре. Поправьте строку 127.0.1.1 в /etc/hosts, иначе sudo начнёт жаловаться «unable to resolve host»; уже запущенные процессы и открытые терминалы увидят новое имя после перезапуска. В Windows Rename-Computer требует перезагрузки: имя участвует в регистрации в домене и NetBIOS.

Что такое хостнейм в настройках роутера?

Имя, под которым роутер представляется провайдеру по DHCP и показывает себя в локальной сети. У некоторых провайдеров оно должно совпадать с указанным в договоре — иначе адрес не выдадут. В таблице DHCP-клиентов та же колонка показывает имена подключённых устройств: их присылают сами устройства в опции 12 DHCP-запроса, поэтому телефон с пустым именем виден как строка с одним MAC-адресом.

Была ли статья полезна?

Начните мониторинг прямо сейчас

Бесплатный тариф — до 5 проверок. 150 ₽ на баланс при регистрации.

Создать аккаунт