Адрес сервера
Адрес сервера — то, что нужно клиенту для подключения: имя или IP, номер порта и протокол, по которому идёт обмен.
Что такое Адрес сервера
Адрес сервера — набор данных, по которым клиент находит сервис и подключается к нему. В обиходе так называют что угодно: и IP-адрес, и домен, и строку из панели хостинга. На деле полный адрес почти всегда состоит из трёх частей.
https :// db.example.com : 5432
│ │ │
протокол хост порт
как говорить куда идти к какой программе
- Хост — FQDN или IP-адрес: какая машина.
- Порт — какое приложение на ней. Часто не пишут, потому что у протокола есть значение по умолчанию: 443 для HTTPS, 22 для SSH, 5432 для PostgreSQL.
- Протокол — на каком языке разговаривать. Без него хост и порт бесполезны: на 443 порту может быть и HTTPS, и что угодно ещё.
Имя или IP — вопрос не вкуса: адрес меняется при переезде и пересоздании сервера, имя остаётся. Поэтому в конфигах, строках подключения и мониторинге пишут FQDN, а IP оставляют для случаев, где DNS ещё не работает.
Где вы его встретите
Форма записи меняется, суть — нет:
# SSH: пользователь, хост, порт
ssh -p 2222 deploy@server1.example.com
# строка подключения к БД
postgresql://app_user:пароль@db.example.com:5432/production
# IPv6 — хост в квадратных скобках, иначе двоеточия не разобрать
ssh admin@[2001:db8::1]
curl "http://[2001:db8::1]:8080/health"
# и совсем другой вид адреса — путь к unix-сокету
psql "host=/var/run/postgresql dbname=production"
Последняя строка — важная деталь. Если клиент и сервер на одной машине, сети может не быть вовсе: unix-сокет быстрее TCP и не выставляет ничего наружу.
Локальные адреса, которые путают чаще всего
| Адрес | Что означает |
|---|---|
127.0.0.1, localhost |
эта же машина, снаружи недоступно |
0.0.0.0 |
слушать на всех интерфейсах |
::1 |
localhost в IPv6 |
169.254.169.254 |
метаданные инстанса в облаке |
Разница между 127.0.0.1 и 0.0.0.0 в конфиге — граница между «доступно только локально» и «открыто всей сети». Классическая ошибка в двух направлениях: сервис слушает 127.0.0.1, а к нему стучатся снаружи и получают отказ; или наоборот — база подняли на 0.0.0.0, и она оказалась в интернете.
В контейнере localhost — это сам контейнер, а не хост и не соседний сервис. Внутри Docker Compose адресом служит имя сервиса: postgres:5432, а не 127.0.0.1:5432.
Как проверить адрес
Разбор идёт по частям — так вы сразу поймёте, где сломалось:
$ dig +short db.example.com # 1. имя резолвится?
10.0.0.20
$ ping -c1 10.0.0.20 # 2. хост доступен?
$ nc -zv db.example.com 5432 # 3. порт открыт?
Connection to db.example.com 5432 port [tcp/postgresql] succeeded!
$ curl -v https://api.example.com/health # 4. отвечает ли приложение
Резолвится, но порт закрыт — вопрос к файрволу или к тому, на каком интерфейсе слушает сервис. Не резолвится — вопрос к DNS, и до сервера дело ещё не дошло.
Что стоит помнить
- Адрес приложения и адрес сервера — разные вещи. За одним
example.com:443может стоять балансировщик и десяток машин; клиент видит один адрес, серверов физически много. - Учётные данные — не часть адреса. Пароль в строке подключения попадает в историю bash, в логи и в git. Выносите его в переменные окружения.
- Внутренние адреса не должны быть публичными. База адресуется приватным IP внутри VPC, наружу торчит только веб.
Связанные термины
- IP-адрес — числовая часть адреса
- FQDN — имя, которое лучше указывать вместо IP
- Сетевые порты — вторая обязательная часть адреса
- DNS — превращает имя в адрес
- Домен — основа читаемого адреса
- Сетевая диагностика — как проверить каждую часть
Готовы запустить GPU-задачу?
Запустить GPU-сервер