5

Для веб-разработки на моем локальном сервере (nginx) мне нравится создавать субдомены vhosts для некоторых проектов, в основном для удобства и гибкости. Например

server {
    listen       80;
    server_name  project.myHostname;

    root         /that/projects/html/root;
    ....
}

Хотя технически сомнительно (?) он отлично работает при запросе http://project.myHostname на той же машине. Но я хотел бы получить конфигурацию, в которой я мог бы получить доступ к http://project.myHostname с любого устройства, подключенного к локальной сети (и только там). Точно так же, как это работает, когда я получаю доступ к myHostname (потому что, я полагаю, мои маршрутизаторы DNS разрешают это локальному ip). Но с другой стороны, я получаю всевозможные ошибки, кричащие, что нет такой вещи как subdomain.hostname .

Единственное решение, которое я нашел до сих пор, - это вручную отредактировать файл hosts для каждого устройства, которое должно иметь возможность запрашивать этот "адрес". Есть ли более удобное решение?

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

2 ответа2

4

Вам нужны функции DNS, поэтому вы должны использовать DNS.

  1. Настройте DNS-сервер, такой как Bind9 или Unbound, - вы должны использовать тот, который способен работать как рекурсивный и авторитетный одновременно;
  2. Настройте свой компьютер для использования этого сервера для DNS вместо вашего маршрутизатора;
  3. Для повышения производительности настройте DNS-сервер на использование обычных адресов DNS-серверов в качестве "серверов пересылки" (чтобы использовать их кэш).

Это часть "подготовки".


Теперь создайте новую зону с именем "myHostname". Это почти то же самое, что хостинг вашего собственного домена, например example.com , так что вы можете следовать различным существующим учебным пособиям.

(Зона соответствует области полномочий - обычно это TLD или "обычный" домен первого уровня, но в некоторых случаях поддомен также может быть своей собственной зоной.)

Многие люди используют dnsmasq для этой цели, но я не знаю, поддерживает ли он подстановочные знаки. Плюс его конфигурация действительно неясна, поэтому я пропущу это.

В Unbound (в основном рекурсор с очень ограниченными авторитетными функциями хостинга) это выглядит так:

server:
    (other settings...)
    local-zone: "myHostname." static
    local-data: "myHostname. A 192.168.1.234"
    local-data: "*.myHostname. A 192.168.1.234"
    (other settings...)

forward-zone:
    name: "."
    forward-addr: 8.8.8.8
    forward-addr: 8.8.4.4

Это указывает и myHostname и <anything>.myHostname на указанный IP-адрес.

В Bind9 (это полнофункциональный авторитетный сервер) он немного сложнее - вам нужно создать отдельный "файл зоны":

; /etc/named.conf

options {
    (other settings...)
    forwarders { 8.8.8.8; 8.8.4.4; };
};

zone "myHostname" {
    type master;
    file "/var/named/myHostname.zone";
};

; /var/named/myHostname.zone (example in short form, with $ORIGIN)

$ORIGIN myHostname.
$TTL 1h
@  SOA  localhost. whatever. ( 1 4h 1h 7d 1h )
@  A    192.168.1.234
*  A    192.168.1.234

; /var/named/myHostname.zone (same example but in full form)

$TTL 1h
myHostname.    SOA  localhost. whatever. ( 1 4h 1h 7d 1h )
myHostname.    A    192.168.1.234
*.myHostname.  A    192.168.1.234

($ORIGIN автоматически добавляется ко всем именам, если они еще не заканчиваются точкой.)

1

Здесь есть два вопроса.

1) Преобразование имени в IP.

Ответ Гравити на это мертв. Для этого вы либо вручную отредактируете файл хоста на всех компьютерах (выполнимо для одной из двух систем, но не для большого количества систем).

или вы используете систему, предназначенную для этого. Эта система является DNS.

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

1B)

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

Это может быть хорошей отправной точкой для начала. Без хорошей основы вы строите на зыбучих песках. Полный ответ на этот вопрос, вероятно, не поместился бы ни в одном посте. Так что ищите полный ответ в другом месте.


2) HTTP.

HTTP - странный протокол. Почти все протоколы в интернете работают через TCP/IP. Датаграммы передаются по TCP или UDP на IP.

HTTP, с другой стороны, также включает имя хоста в свои запросы. Это то, что позволяет вам запускать несколько разных веб-страниц с одной комбинации IP: порт. Обычно это очень удобно, но для этого нужно отправить (и разрешить) нужный хост. Это означает, что вы сначала хотите погуглить и прочитать учебник по DNS.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .