У конфігураціях програм часто зустрічається слово localhost, проте використання мітки нерідко може стати причиною несподіваних помилок. У той же час, використання адреси з числовими значеннями допомагає уникнути більшості проблем. Розглянемо докладніше чому так відбувається.
В основі роботи Інтернету лежать IP-протоколи. Вони здатні ідентифікувати всі хости в мережі IP-адресою, що, власне, і дає можливість здійснювати маршрутизацію пакетів даних. Відповідно, всі пристрої мережі працюють не з іменами доменів, а саме з IP-адресами. При використанні мітки localhost, яка є доменом, виконується резолвінг - процес його перетворення на IP-адресу. Ця процедура здійснюється за допомогою команди resolving nslookup і доступна завдяки розподіленій системі DNS.
Після цього, при запуску будь-якого сервісу, наприклад, бази даних або Nginx, він слухає IP-адресу по певному порту. Така пара називається сокетом. У специфікації RFC 6761 ви можете відстежити, на яку саме IP-адресу перетворюється localhost — це буде loopback-адреса. При цьому специфікації RFC 5735, де описаний loopback-інтерфейс говориться, що це не одна конкретна IP-адреса, а ціла мережа з діапазоном 127.0.0.0/8, яка може включати мільйони різних хостів. Наприклад, loopback також може використовувати адресу 127.1.1.1 та багато інших.
З цього випливає основна проблема використання мітки в конфігураціях — у такому разі ми отримуємо неоднозначність того, в якій саме IP-адреса буде резолвуватись localhost. На практиці, в більшості операційних систем перетворення дійсно здійснюється в 127.0.0.1, але це лише одна з можливих адрес, і вам нічого не заважає використовувати, наприклад, 127.11.11.11.
Така неоднозначність може стати серйозною проблемою для програмного забезпечення, що розробляється. Фактично, у процесі резолвінгу додатку доводиться або звертатися до DNS операційної системи або самостійно вирішувати це питання.
Для кращого розуміння розглянемо простий приклад, з використанням бази даних mySQL. Якщо конфігурації сервера вказано localhost, то клієнт, відповідно, намагається приєднатися до localhost. При цьому, якщо юніксовий сокет у конфізі не вказаний або написаний некоректно, то консольний клієнт mySQL не зможе підключитися до сервера.
Щоб уникнути таких проблем, доменне ім'я localhost не рекомендується використовувати в конфігураціях. Натомість краще прописати точну адресу 127.0.0.1. Таким чином ви будете повністю впевнені, що запит надсилається за потрібним маршрутом і з комутацією на сервер не виникне труднощів.