Файл Hosts: неверно ли иметь один и тот же IP-адрес в нескольких строках?


28

Какое-то время я форматировал свой хост-файл следующим образом. Обратите внимание на один и тот же ip в двух строках:

e.f.g.h foo.mydevsite.com
e.f.g.h foo.myOtherDevSite.com

Недавно я прочитал, что псевдонимы должны быть объединены в одну строку:

e.f.g.h foo.mydevsite.com foo.myOtherDevSite.com 

Однако мне не нравится этот метод, потому что вы не можете легко закомментировать определенные псевдонимы или добавить комментарии к определенным псевдонимам, например так:

  a.b.c.d foo.mydevsite.com          # myDevSite on box 1
# a.b.c.d foo.myOtherSite.com        # myOtherSite on box 1 
  a.b.c.d ubuntuBox                  

  e.f.g.h foo.myOtherSite.com        # myOtherSite testing environment

До сих пор это работало нормально; есть ли проблема с этим?

Ответы:


28

Я нашел эту ветку, в которой обсуждается что-то подобное. Поток довольно непреклонен о том, чтобы в /etc/hostsфайле не было нескольких строк .

выдержка - Re: / etc / hosts: две строки с одинаковым IP-адресом?

Нет, не будет. Резольвер останавливается на первом разрешении. Имея что-то вроде:

   127.0.0.1 localhost.localdomain localhost
   127.0.0.1 somenode.somedom.com somenode

Не буду делать то, о чем ты говоришь. НО имея:

   127.0.0.1 somenode.somedom.com somenode
   127.0.0.1 localhost.localdomain localhost

Будет причиной всех видов хаоса. Включая пересылку.

Я бы вообще не делал то, что вы пытаетесь. Если вам нужно больше доказательств, на странице руководства даже сказано не делать этого:

выдержка man hosts

Эта страница руководства описывает формат файла / etc / hosts. Этот файл представляет собой простой текстовый файл, который связывает IP-адреса с именами хостов, по одной строке на IP-адрес. Для каждого хоста должна присутствовать отдельная строка со следующей информацией:

         IP_address canonical_hostname [aliases...]

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


1
Я не наблюдаю эффекты, отмеченные какой- либо стороной в этой теме. Например, несколько строк для 127.0.0.1 не влияют на вывод hostname(в отличие от OP), и все они разрешаются правильно (в отличие от респондента).
Златовласка

1
Но gethostbyaddr()вещь, которую они поднимают, важна. +1
златовласка

Очень интересно! Я не знал, что файл hosts был использован двунаправленно (получить имя хоста из ip, получить ip из host-name). Это определенно поднимает некоторые проблемы. Может быть, мне стоит взглянуть на процесс сборки файла hosts, который захватывает читаемую человеком версию и затем «исправляет» ее, объединяя псевдонимы хоста в одну строку. Должен быть очень простой сценарий.
AlexMA

1
@AlexMA - если вы обнаружили, что /etc/hostsэто вызывает у вас горе, вы всегда можете настроить DNS. Я запускаю BIND именно по этой причине: (1) потому что централизованно легче управлять, и (2) я получаю разрешение так, как я хочу, без особых проблем. Есть более легкие варианты, такие как DNSMasq для этого тоже. Эти системы могут быть использованы на одной коробке тоже!
SLM

@slm Это звучит как очень хороший вариант для производственной среды. Вероятно, ценный учебный проект тоже.
AlexMA

5

Я считаю, что третий метод работал нормально; есть ли проблема с этим?

Я всегда делал это немного, но есть потенциальная проблема, поскольку в соответствии с man gethostbyaddrэтим системный вызов может использовать, /etc/hostsчтобы связать IP-адрес с именем. Хотя гораздо более распространенный случай - наоборот (узнайте адрес по имени), помните об этом на случай, если случится что-то смешное.


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

Что ж, slmстоит задуматься; возможно, система не должна была использоваться таким образом. Я собираюсь продолжать это делать (заметьте, я в основном просто использую это для 127.0.0.1, чтобы я мог трансплантировать и тестировать вещи локально, не изменяя конфигурацию виртуального хоста), но я добавил оговорку в последний абзац.
Златовласка

На самом деле я отредактировал это, чтобы учесть "потенциальную проблему" ...
Златовласка

0

Apache 2.4 отказался запускаться в моей системе Unix. Основной причиной были повторяющиеся строки в / etc / hosts. После того, как я удалил дублирующую строку, я смог запустить веб-сервер.


4
Это полезная информация, но, вероятно, это должен быть комментарий, а не ответ в соответствии с рекомендациями этого сайта.
AlexMA
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.