Підстановочні картки у файлі хостів Windows


289

Я хочу налаштувати свою локальну розроблювальну машину так, щоб будь-які запити на *.localпереадресацію localhost. Ідея полягає в тому , що , як я розробляю декілька сайтів, я можу просто додати ВХости до Apache називається site1.local, і site2.localт.д., і у них все постановляють localhost, в той час як Apache обслуговує інший сайт відповідним чином .

Я на Windows XP.

Я спробував додати

127.0.0.1       *.local

до мого c:\windows\system32\drivers\etc\hostsфайлу, також спробував:

127.0.0.1       .local

Жоден з яких, здається, не працює.

Я знаю, що можу їх встановити на різних номерах портів, але це біль, оскільки важко запам’ятати, який саме порт.

Мені не хочеться встановлювати локальний DNS-сервер чи щось важке, будь-які пропозиції?


1
Будь ласка, не соромтеся використовувати anysubdomain.reconn.co.uk в якості роботи (якщо ви в мережі), яка завжди вказуватиме на ваш локальний господар (див. Мою відповідь нижче).
Пол Грімшо

як щодо сценарію, який аналізує apache vhosts ServerName та оновлює файл хостів?
Elvis Ciotti

1
Я вважаю, що * .local має особливу семантику, і вам слід використовувати щось неіснуюче. Я використовую * .dev, оскільки не думаю, що це реально.
WraithKenny

Відповіді:


431

Акриловий DNS-проксі (безкоштовний, з відкритим кодом) виконує цю роботу. Він створює проксі-сервер DNS (на власному комп’ютері) з власним файлом хостів. Файл хостів приймає підстановку.

Завантажити з офіційного веб-сайту

http://mayakron.altervista.org/support/browse.php?path=Acrylic&name=Home

Налаштування акрилового DNS-проксі

Щоб налаштувати акриловий DNS-проксі, встановіть його за вказаним вище посиланням та перейдіть до:

  1. Старт
  2. Програми
  3. Акриловий DNS-проксі
  4. Налаштування
  5. Редагування спеціального файлу хостів (AcrylicHosts.txt)

Додайте наступні рядки в кінці файлу:

127.0.0.1   *.localhost
127.0.0.1   *.local
127.0.0.1   *.lc

Перезапустіть сервер проксі-сервера DNS:

  1. Старт
  2. Програми
  3. Acrilic DNS-проксі
  4. Налаштування
  5. Перезавантажте сервіс акрилу

Вам також потрібно буде відрегулювати налаштування DNS у налаштуваннях мережевого інтерфейсу:

  1. Старт
  2. Панель управління
  3. Мережа та Інтернет
  4. Підключення до мережі
  5. Властивості підключення до локальної області
  6. TCP / IPv4

Встановіть "Використовувати таку адресу сервера DNS":

Preferred DNS Server: 127.0.0.1

Якщо потім поєднати цю відповідь з відповіддю jeremyasnyder (використовуючи VirtualDocumentRoot), то ви можете автоматично налаштувати домени / віртуальні хости, просто створивши каталог.


12
Щоб зрозуміти, "спеціальний файл хостів" - це AcrylicHosts.txt, а не AcrylicConfiguration.ini. Можливо, це повинно бути очевидним, але це мене на деякий час бентежило.
mhenry1384

@Petah - ця точна конфігурація працювала для мене з доменними підказками, але вона просто зупинилася, і я не можу зрозуміти, чому. Усі запити повертаються "Ця сторінка недоступна". Перезапущений акрил, скиньте всі кеші ... що ще ви думаєте, що це може бути?
SB2055

1
@ SB2055 перевірити налаштування DNS у своїх мережевих властивостях все-таки правильно.
Пета

Слід зазначити, що Акрил не дуже підходить для ситуацій, коли ваше мережеве середовище часто змінюється. Загальнодоступний сервер DNS Google не вирішить імена справжніх машин у вашій мережі ... і ви можете виправити це для однієї мережі, але ви все одно не зможете вирішити внутрішні імена машин, переходячи до іншої мережі. Це може бути особливо болісно. Але я також повинен зазначити, що я не знаю всього, що потрібно знати про акрил.
Олексій Дреско,

Якщо це робиться в межах VM, то PrimaryServerAddressв конфігурації (не у файлі хостів) слід змінити з типового 8.8.8.8на той, який надає хост. У VirtualBox це так 10.0.2.3.
mightyiam

80

Щоб відповісти на ваше запитання, ви не можете використовувати підстановку у файлі хостів під Windows.

Однак якщо ви хочете лише змінити файл хостів, щоб нові сайти запрацювали .... ви можете налаштувати Apache таким чином, і вам не потрібно буде редагувати його конфігурацію:

http://postpostmodern.com/instructional/a-smarter-mamp/

В основному, короткий підсумок на основі моїх налаштувань, додайте у файл apache.conf наступне:

 LoadModule vhost_alias_module modules/mod_vhost_alias.so

 NameVirtualHost *:80

  <Directory "/xampp/sites">
      Options Indexes FollowSymLinks Includes ExecCGI
      AllowOverride All
      Order allow,deny
      Allow from all 
  </Directory>

  <VirtualHost *:80>
      VirtualDocumentRoot c:/xampp/sites/%-1/%-2+/
  </VirtualHost>

Це дозволяє мені додати запис на зразок:

127.0.0.1       test.dev

а потім зробіть каталог, c: \ xampp \ sites \ dev \ test і помістіть туди потрібні файли, і він просто працює.

Іншим варіантом є використання <Directory>тегів у apache.conf та посилання на сторінки з http: // localhost / project / .


Чи можете ви використовувати підстановку на OSX?
cjm2671

Так, використовуючи Bind - clintberry.com/2011/…
Ryan Schumacher

30

Я не думаю, що це можливо.

У будь-якому випадку вам доведеться змінювати записи віртуального кореневого апарату щоразу, коли ви додаєте новий сайт та місцеположення, тому синхронізувати нове ім’я у файлі Windows vhost не велика робота.

Оновлення: перевірте наступну відповідь та коментарі до цієї відповіді. Ця відповідь 6 років і більше не є правильною.


3
Але при використанні Nginx не потрібно змінювати файл налаштування Nginx, щоб додати нову групу доменів другого рівня * .localhost. Отже, це мінус файлу хостів.
сергач

8
Просто зазначимо, що коли у вас є багатомовний веб-сайт, у вас може бути <VirtualHost> з ServerAlias *.mydomain.localhost( *мовний код), так що вам не доведеться редагувати httpd.conf щоразу, коли ви додаєте нову мову; але вам все одно потрібно додати піддомен до файлу хостів, отже, актуальність вищезазначеного питання.
Бенджамін

10
Динамічні віртуальні хости - це ключове слово, яке підтримується більшістю серверів, тобто Apache та Nginx. Так що ні, вам точно не потрібно торкатися конфігурації Apache кожного разу, коли ви створюєте проект.
Валентин Клінгеммер

2
У нас також можуть бути віртуальні хости, і це лише до hostsфайлу
ericn

6

На додаток до чудових пропозицій вже тут, XIP.IO - це фантастичний підстановочний DNS-сервер, який є загальнодоступним.

      myproject.127.0.0.1.xip.io  -- resolves to -->   127.0.0.1
  other.project.127.0.0.1.xip.io  -- resolves to -->   127.0.0.1
   other.machine.10.0.0.1.xip.io  -- resolves to -->   10.0.0.1

(Можливість вказувати адреси, що не відносяться до циклу, є фантастичною для тестування сайтів на пристроях iOS, де ви не можете отримати доступ до файлу хосту.)

Якщо ви поєднаєте це з деякою конфігурацією Apache, згаданою в інших відповідях, ви можете потенційно додати VirtualHosts з нульовою установкою .


І це працює для членів вашої команди у випадку IP-адреси у вашій локальній мережі. Їм не потрібно встановлювати локальний DNS-сервер з тим самим файлом хостів.
Тобіас Уманн

4

Я знайшов публікацію про використання файлу хостів Windows, де також написано "Заборонені символи заборонені".

У минулому я тільки що додав додаткові записи до файлу хостів, тому що (як було сказано раніше), це вже не велика робота, коли ви вже редагуєте конфігураційний файл apache.


Чим довше ви створюєте файл хостів, тим більше часу знадобиться для вирішення запитів. Не вдале рішення, якщо у вас багато записів.
Чемберлен

4

Редагування файлу хостів менше не викликає біль, коли ви запускаєте "ipconfig / flushdns" з командного рядка Windows, а не перезавантажуєте комп'ютер.


1
він не змиває кеш-пам'ять браузера dns, а вікна. Тож йому доведеться почекати 20-30 хвилин, щоб браузер випустив кешування dns.
Якоб Мельвад Йенсен

3

Ви можете поговорити зі своїм адміністратором мережі, щоб він створив для вас домен (скажімо, «evilpuppetmaster.hell») і мав підстановку, щоб все (* .evilpuppetmaster.hell ') відповідало вашому IP


1
Дякую, але це на домашньому розробнику, немає доступних DNS або мережевого адміністратора.
EvilPuppetMaster

Гаразд, можливо, у вас є доступ до домену або ви знаєте когось, хто це робить? Напр .: * .evilpuppetmatser.arealdomain.com
Стю Томпсон,

Не зовсім. Тим не менш, це домашня машина, тому вона отримує новий IP щоразу, коли мій маршрутизатор підключається до Інтернету. Зовнішній DNS-сервер не допоможе.
EvilPuppetMaster

1
1) Немає причин * .evilpuppetmatser.arealdomain.com не може вирішити 127.0.0.1, 2) я не пропоную зовнішній DNS-сервер. Я пропоную вам використовувати субдомен на реальному домені. Технічно кожен може вирішити server.evp.arealdomain.com.
Стю Томпсон,

3
Є також деякі публічні, такі як * .127.0.0.1.xip.io та інші
Дейв Джеймс Міллер

3

У нас це працює за допомогою шаблону DNS на локальному сервері DNS: додайте Aзапис щось на кшталт*.local -> 127.0.0.1

Я думаю, що для ваших мережевих налаштувань повинен бути обраний суфікс домену у списку пошуку суфіксів домену для машин у мережі, тож ви можете замінити .localвнутрішній домен вашої компанії (наприклад .int), а потім додати піддомен, як .localhost.intщоб це стало зрозумілим для чого це

Таким чином, *.localhost.intбуде вирішено 127.0.0.1для всіх в мережі, а налаштування файлів для всіх розробників буде "просто працювати", якщо кінцеві точки відключать цей піддомен, наприклад site1.localhost.int, site2.localhost.intце в значній мірі представлена ​​нами схема.

dnsmasq також виглядає приємно, але я його ще не пробував: http://ihaveabackup.net/2012/06/28/using-wildcards-in-the-hosts-file/



2

Ви можете спробувати AngryHosts , який надав спосіб підтримати підстановку та регулярне вираження. Насправді це програмне забезпечення для вдосконалення та управління файлами хостів.
Більше можливостей можна побачити @ http://angryhosts.com/features/


2

Я використовую DNSChef для цього.

https://thesprawl.org/projects/dnschef/

Вам потрібно завантажити додаток, для Linux або Mac для запуску потрібен python. У Windows є власний екзе.

Ви повинні створити файл ini, наприклад, із записами dns

[A]
*.google.com=192.0.2.1
*.local=127.0.0.1
*.devServer1.com=192.0.2.3

Потім потрібно запустити додаток dns з правами адміністратора

sudo python dnschef.py --file myfile.ini -q

або у вікнах

runas dnschef.exe --file myfile.ini -q

Нарешті, вам потрібно налаштувати як єдиний DNS ваше локальне хост-середовище (мережу, інтерфейс, dns або подібне або в linux /etc/resolv.conf).

Це воно


2

Я зробив цей простий інструмент, щоб зайняти місце господарів. Регулярні вирази підтримуються. https://github.com/stackia/DNSAgent

Приклад конфігурації:

[
    {
        "Pattern": "^.*$",
        "NameServer": "8.8.8.8"
    },
    {
        "Pattern": "^(.*\\.googlevideo\\.com)|((.*\\.)?(youtube|ytimg)\\.com)$",
        "Address": "203.66.168.119"
    },
    {
        "Pattern": "^.*\\.cn$",
        "NameServer": "114.114.114.114"
    },
    {
        "Pattern": "baidu.com$",
        "Address": "127.0.0.1"
    }
]

0

Я не зміг знайти заборону в письмовій формі, але за умовою, файл хостів Windows уважно слідкує за файлом хостів UNIX, і ви не можете помістити в цей файл посилання підстановочного імені хоста.

Якщо ви читаєте сторінку man, на ній написано:

DESCRIPTION
     The hosts file contains information regarding the known hosts on the net-
     work.  For each host a single line should be present with the following
     information:

           Internet address
           Official host name
           Aliases

Хоча це і говорить,

     Host names may contain any printable character other than a field delim-
     iter, newline, or comment character.

це не вірно з практичного рівня.

По суті, код, який переглядає файл / etc / hosts, не підтримує заголовок.

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


0

@petah та акриловий DNS-проксі - найкраща відповідь, і наприкінці він посилається на можливість робити багато сайтів за допомогою Apache, який @jeremyasnyder описує трохи далі вниз ...

... однак у нашому випадку ми тестуємо систему хостингу з кількома орендарями, тому більшість доменів, які ми хочемо перевірити, переходять на те саме virtualhost, тоді як пара інших спрямовується в інше місце.

Тож у нашому випадку ви просто використовуєте підстановочні символи регулярного виразу ServerAlias, як-от так ...

ServerAlias *.foo.local

0

Ось загальна конфігурація для тих, хто намагається досягти поставленої мети (подстановочні знаки в середовищі розробників, тобто XAMPP - цей приклад передбачає, що всі сайти вказують на одну кодову базу)

файл хостів (додайте запис)

файл:% SystemRoot% \ system32 \ driver \ etc \ hosts

127.0.0.1   example.local

Конфігурація httpd.conf (увімкнути vhosts)

файл: \ XAMPP \ тощо \ httpd.conf

# Virtual hosts
Include etc\extra\httpd-vhosts.conf

Конфігурація httpd-vhosts.conf

файл: XAMPP \ etc \ extra \ httpd-vhosts.conf

<VirtualHost *:80>
    ServerAdmin admin@example.local
    DocumentRoot "\path_to_XAMPP\htdocs"
    ServerName example.local
    ServerAlias *.example.local
#    SetEnv APP_ENVIRONMENT development
#    ErrorLog "logs\example.local-error_log"
#    CustomLog "logs\example.local-access_log" common
</VirtualHost>

перезапустити апаш

створити Pac файл:

збережіть як завгодно.pac там, де ви хочете, а потім завантажте файл у мережу браузера> проксі> налаштування авто_конфігурації (перезавантажте, якщо змінити це)

function FindProxyForURL(url, host) {
  if (shExpMatch(host, "*example.local")) {
    return "PROXY example.local";
  }
  return "DIRECT";
}

Не працював, поки не знаю про PAC, але цей рядок 'повертається' PROXY example.local ';' не повертає проксі ip: порт, який браузер використовуватиме як проксі?
іон

0

Ви можете використовувати echoipdns для цього ( https://github.com/zapty/echoipdns ).

Запустивши echoipdns local всі запити для .local субдоменів, переспрямовується на 127.0.0.1, тому будь-який домен з xyz.local тощо буде вирішувати на 127.0.0.1. Ви можете використовувати будь-який інший суфікс, а також просто замінити локальний на потрібне ім'я.

Echoipdns ще більш потужний, коли ви хочете використовувати свій URL з інших машин у мережі, ви все одно можете використовувати його з нульовою конфігурацією.

Наприклад, якщо IP-адреса вашого комп'ютера - 192.168.1.100, ви тепер можете використовувати доменне ім'я xyz.192-168-1-100.local, яке завжди буде дозволено до 192.168.1.100. Ця магія виконується echoipdns шляхом перегляду ip-адреси у другій частині доменного імені та повернення тієї самої ip-адреси у DNS-запиті. Вам доведеться запустити echoipdns на машині, з якої ви хочете отримати доступ до віддаленої системи.

echoipdns також може бути налаштований як автономний проксі-сервер DNS, тому, просто вказуючи на цей DNS, тепер ви можете використовувати всі перераховані вище переваги, не запускаючи спеціальну команду кожен раз, і навіть можете використовувати її з мобільних пристроїв.

Таким чином, це суттєво спрощує розробку DNS на основі доменних кодів як для місцевого, так і для командного середовища.

echoipdns працює на Mac, Linux та Windows.

ПРИМІТКА. Я автор ехопднів.


0

Конфігурація автоматичного піддомена для nginx config з акриловим DNS-проксі

файл auto.conf для папки ваших сайтів nginx

server {
    listen 80;
    server_name ~^(?<branch>.*)\.example\.com;
    root /var/www/html/$branch/public;  

    index index.html index.htm index.php;

    charset utf-8;

    location / {
        try_files $uri $uri/ /index.php$is_args$args;
    }

    location = /favicon.ico { access_log off; log_not_found off; }
    location = /robots.txt  { access_log off; log_not_found off; }

    error_log  /var/log/nginx/$branch.error.log error;

    sendfile off;

    client_max_body_size 100m;

    location ~ \.php$ {
       try_files $uri /index.php =404;
       fastcgi_pass php-fpm:9000;
       fastcgi_index index.php;
       fastcgi_buffers 16 16k;
       fastcgi_buffer_size 32k;
       fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
       include fastcgi_params;
    }

    location ~ /\.ht {
        deny all;
    }
}

Додайте до файлу хостів Акрилу 127.0.0.1 example.com *.example.comта перезапустіть сервіс Акрил. $ відділення - ваше піддоменне ім'я.

Встановити замість root / var / www / html / $ branch / public; ваш шлях до проекту


0

Це можна зробити за допомогою Pi-Hole , просто відредагуйте "/ etc / hosts" та перезапустіть службу dns.

nano /etc/hosts
pihole restartdns

Приклад:

127.0.1.1       raspberrypi
192.168.1.1     w1.dev.net
192.168.1.2     w2.dev.net
192.168.1.3     w3.dev.net

-1

Ви можете використовувати динамічний клієнт DNS, такий як http://www.no-ip.com . Потім, із зовнішнім сервером DNS CNAME * .mydomain.com на mydomain.no-ip.com.


2
це може відповідати вашому зовнішньому ip, і зазвичай це просто відобразить вашу сторінку конфігурації маршрутизатора / модема
Сем

-1

Хоча ви не можете додати такий підстановку, ви можете додати повний список сайтів, які вам потрібні, принаймні для тестування, які досить добре працюють для мене, у вашому файлі хостів ви просто додасте:

127.0.0.1 site1.local
127.0.0.1 site2.local
127.0.0.1 site3.local
...


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