Файл хостів: Невірно мати однакову 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файл не має рядків .

excerpt - 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 навіть каже, що цього не робити:

витяг man hosts

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

         IP_address canonical_hostname [aliases...]

Все це говориться, якщо ваші імена хостів FQDN і вони не перетинаються, то ви, ймовірно, можете робити те, що ви робите. Просто майте на увазі, що якщо є якесь накладення, наприклад, про те, що згадувалося в потоці вище, ви можете зіткнутися з вирішенням проблем.


1
Я не спостерігаю за ефектами, зафіксованими жодною із сторін у цій темі. Наприклад, кілька рядків для 127.0.0.1 не впливають на вихід hostname(проти ОП), і всі вони вирішуються правильно (проти респондента).
goldilocks

1
Але gethostbyaddr()річ, яку вони піднімають, значна. +1
goldilocks

Дуже цікаво! Я не розумів, що файл хосту використовується двонаправленим (отримати ім'я хоста від ip, отримати ip від імені хоста). Це, безумовно, викликає деякі проблеми. Можливо, я повинен вивчити процес збирання файлів хостів, який захоплює читану людиною версію, а потім "виправляє" її шляхом об'єднання псевдонімів хоста в один рядок. Має бути дуже простий сценарій.
AlexMA

1
@AlexMA - якщо ви виявите, що /etc/hostsвикликає у вас горе, ви завжди можете налаштувати DNS. Я запускаю BIND саме з цієї причини, (1) b / c легше централізовано керувати, і (2) я отримую вирішення так, як мені хочеться звідти, без великих головних болів. Існують більш легкі варіанти, такі як DNSMasq для цього. Ці системи можна використовувати і в одній коробці!
slm

@slm Це здається дуже хорошим варіантом для виробничого середовища. Можливо, і цінний навчальний проект.
AlexMA

5

Я вважаю, що третій метод працює добре; чи є з цим проблема?

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


Як я підозрював, але хотів бути впевненим, що там, здається, немає великої документації. Я також не знав, чи може виникнути більше проблем з деякими надзвичайно суворими дистрибутивами unix. Незабаром я дам вам відповідь, якщо ніхто інший не зазіхає на іншу позицію.
AlexMA

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

Насправді я це відредагував, щоб врахувати "потенційну проблему" ...
goldilocks

0

Apache 2.4 відмовився запускатися в моїй системі Unix. Першопричиною були повторювані рядки в / etc / hosts. Після видалення дублюючої лінії я зміг запустити веб-сервер.


4
Це корисна інформація, але, ймовірно, має бути коментарем, а не відповіддю відповідно до вказівок цього сайту.
AlexMA
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.