Используется ли компьютерная система (Linux) только одно имя хоста?

Личный опыт.

Иногда я использую этот формат в своих сценариях для произвольного переопределения значений, например если у меня есть:

$ cat script.sh
SOMETHING="${SOMETHING:-something}"; echo "$SOMETHING"; 

, я могу запустить:

$ env SOMETHING="something other than the default value" ./script.sh` 

без изменения исходного значения по умолчанию ЧТО-ТО .

15
12.02.2019, 00:48
3 ответа

И да, и нет. Это две разные вещи, называемые именами хостов.

«Внутреннее» имя хоста в основном представляет собой строку, хранимую ядром. Это тот, который возвращается командой hostname(или вызовом gethostname()), и он уникален в системе (*).

Чаще всего используется, когда программа хочет вывести некоторый идентификатор системы, в которой она работает. Например. \hв Bash PS1заменяется на имя хоста. Точно так же файлы журнала в стиле syslog -также включают имя хоста в записи журнала.

(*Хотя, как отмечает Стивен Китт,Пространства имен могут использоваться для отображения разных имен хостов процессам в одной системе. Это в основном используется для контейнеров, которые пытаются вести себя так, как будто они являются отдельными системами.)

Также есть DNS-имена , которые используются другими системами для поиска чужого IP-адреса. Может быть более одного DNS-имени, указывающего на один и тот же IP-адрес и, следовательно, на один и тот же хост.

Внутреннее имя хоста и DNS-имена могут не совпадать. Предположим, у кого-то есть веб-сервер, который он решил назвать orange(*), с IP-адресом 192.0.2.9. Он может обслуживать два разных домена, и DNS будет настроен так, чтобы www.example.orgи www.example.comоба указывали на 192.0.2.9, а внутреннее имя хоста системы могло бы быть orange.example.orgили просто orange. В этом случае настройка DNS обычно также имеет обратный поиск на 192.0.2.9, указывающий на имя orange.example.org, но ничто не заставляет это делать.

(*потому что им нравится называть свои серверы в честь фруктов. Кто-то может использовать webserver1или что-то подобное, но дело в том, что его не нужно называть в честь одного из реальных доменов.)

Кроме того, виртуальный хостинг требует, чтобы браузер сообщал веб-серверу имя сайта, к которому он пытался получить доступ. В противном случае сервер не знал бы, к какому виртуальному сайту пытается обратиться клиент. HTTP имеет для этого заголовокHost.


Что запутывает различие между именем DNS и внутренним именем хоста, так это протокол mDNS (реализовано, например. демоном avahi)и другими протоколами обнаружения. mDNS позволяет узлам запрашивать все остальные хостов в той же сети для информации об именах и для того, чтобы их собственные имена хостов были видны на других хостах без явной настройки их в DNS.

28
27.01.2020, 19:49

Does a computer system (Linux) only have one host name?

Нет.

[Я полностью игнорирую тот факт, что любой может дать вашему хосту любое имя, которое ему нравится, имея запись DNS, указывающую на его адрес, или что вы можете иметь более одного псевдонима для него в /etc/hosts, или любые философские соображения по поводу что такое имя на самом деле]

В системе Linux имя хоста — это просто -ресурс процесса («пространство имен UTS» ), которое по умолчанию наследуется его дочерними элементами, но может быть отделено от unshare(2)или clone(2)с помощью флага CLONE_NEWUTS. Вам следует заглянуть на справочную страницу namespaces(7).

Точно так же, как pids, номера портов, точки монтирования и т. д., имя хоста больше не является глобальным идентификатором, и его можно виртуализировать точно так же, как адресное пространство (, виртуальную память )или таблицу дескрипторов файлов обработать.

In virtual hosting, several host names can be resolved to different root directories in a web server. If a computer system (Linux) can only have one host name, how is virtual hosting possible?

Виртуальный хостинг — это нечто совершенно другое, и обычно это делается путем настройки записи DNS с подстановочными знаками (, например. *.foo.com=>13.13.13.13)с веб-сервером, работающим на 13.13.13.13и обслуживающим различные каталоги/ресурсы на основе значения заголовка http Host:[1] (, который легко настраивается; большинство веб-серверов могут обслуживать различные ресурсы на основе любого http-заголовка, а не толькоHost:). Во всем этом ОС системы, на которой работает веб-сервер, не играет никакой роли.

[1] или на значении указания имени сервера в случае https, что позволяет одному и тому же веб-серверу использовать разные сертификаты для разных виртуальных хостов.

8
27.01.2020, 19:49

Обычно вы устанавливаете одно имя хоста в /etc/hostname. И вы устанавливаете много доменных имен в /etc/hosts.

Пространства имен UTS позволяют одной системе иметь разные имена хостов и доменов для разных процессов. Для получения дополнительной информации см. Пространства имен Linux . Таким образом, абсолютно возможно иметь несколько имен хостов и доменных имен для одной и той же системы. Например, контейнер докеров внутри одного хоста имеет другое имя хоста, чем хост-система.

1
27.01.2020, 19:49

Теги

Похожие вопросы