Что такое хост, 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 |
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 и фиксирует код ответа именно вашего виртуального хоста, а не дефолтной заглушки сервера.
Пруфен выполняет проверки с интервалом от 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-адресом.