Symbole wieloznaczne w pliku hostów systemu Windows


289

Chcę skonfigurować moją lokalną maszynę programistyczną, aby wszelkie prośby o nią *.localbyły przekierowywane localhost. Chodzi o to, że jak rozwijać wiele witryn, mogę tylko dodać vhosty do Apache nazywa site1.local, site2.localetc, i mieć je wszystkie postanawiamy localhost, gdy Apache służy innemu witryny odpowiednio.

Korzystam z systemu Windows XP.

Próbowałem dodać

127.0.0.1       *.local

do mojego c:\windows\system32\drivers\etc\hostspliku próbowałem też:

127.0.0.1       .local

Żaden z nich wydaje się nie działać.

Wiem, że mogę ustawić je dla różnych numerów portów, ale jest to uciążliwe, ponieważ trudno jest zapamiętać, który port jest który.

Nie chcę konfigurować lokalnego serwera DNS ani nic trudnego, jakieś sugestie?


1
Możesz użyć anysubdomain.reconn.co.uk jako obejścia (jeśli jesteś online), który zawsze będzie wskazywał na twojego localhost (patrz moja odpowiedź poniżej).
Paul Grimshaw,

co ze skryptem, który analizuje apache vhosts nazwa_serwera i aktualizuje plik hosts?
Elvis Ciotti,

1
Wierzę, że * .local ma specjalną semantykę i powinieneś użyć czegoś nieistniejącego. Używam * .dev, ponieważ nie sądzę, że to prawda.
WraithKenny,

Odpowiedzi:


431

Akrylowy serwer proxy DNS (bezpłatny, open source) wykonuje to zadanie. Tworzy serwer proxy DNS (na twoim komputerze) z własnym plikiem hosts. Plik hosts akceptuje symbole wieloznaczne.

Pobierz z oficjalnej strony internetowej

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

Konfigurowanie akrylowego serwera proxy DNS

Aby skonfigurować serwer Acrylic DNS Proxy, zainstaluj go z powyższego łącza, a następnie przejdź do:

  1. Początek
  2. Programy
  3. Akrylowy serwer proxy DNS
  4. Config
  5. Edytuj niestandardowy plik hostów (AcrylicHosts.txt)

Dodaj następujące linie na końcu pliku:

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

Uruchom ponownie usługę Acryl DNS Proxy:

  1. Początek
  2. Programy
  3. Akrylowy serwer proxy DNS
  4. Config
  5. Uruchom ponownie usługę akrylową

Konieczne będzie również dostosowanie ustawień DNS w ustawieniach interfejsu sieciowego:

  1. Początek
  2. Panel sterowania
  3. Sieć i Internet
  4. Połączenia sieciowe
  5. Właściwości połączenia lokalnego
  6. TCP / IPv4

Ustaw „Użyj następującego adresu serwera DNS”:

Preferred DNS Server: 127.0.0.1

Jeśli następnie połączysz tę odpowiedź z odpowiedzią (jeremyasnyder VirtualDocumentRoot), możesz automatycznie skonfigurować domeny / wirtualne hosty, po prostu tworząc katalog.


12
Żeby było jasne, „niestandardowym plikiem hostów” jest AcrylicHosts.txt, a nie AcrylicConfiguration.ini. Może to powinno być oczywiste, ale na chwilę mnie to zamieszało.
mhenry1384

@Petah - ta dokładna konfiguracja działała dla mnie z domenami wieloznacznymi, ale po prostu przestała działać i nie mogę zrozumieć, dlaczego. Wszystkie żądania zwracają „Ta strona jest niedostępna”. Zrestartowałem Acryllic, zresetuj wszystkie pamięci podręczne ... co jeszcze może być?
SB2055

1
@ SB2055 sprawdź, czy ustawienia DNS we właściwościach sieci są nadal prawidłowe.
Petah

Należy zauważyć, że akryl nie jest odpowiedni do sytuacji, w których środowisko sieciowe często się zmienia. Publiczny serwer DNS Google nie rozpozna prawdziwych nazw komputerów w twojej sieci ... i możesz to naprawić dla jednej sieci, ale nadal nie będziesz w stanie rozpoznać wewnętrznych nazw komputerów, gdy przejdziesz do innej sieci. Może to być szczególnie bolesne. Ale powinienem również zauważyć, że nie wiem wszystkiego, co należy wiedzieć o akrylu.
Alex Dresko

Jeśli odbywa się to w maszynie wirtualnej, PrimaryServerAddresskonfiguracja (nie plik hostów) powinna zostać zmieniona z domyślnej na konfigurację 8.8.8.8hosta. W VirtualBox jest to 10.0.2.3.
mightyiam

80

Aby odpowiedzieć na pytanie, nie można używać symboli wieloznacznych w pliku hosts w systemie Windows.

Jeśli jednak chcesz tylko zmienić plik hosts, aby nowe witryny działały .... możesz skonfigurować Apache w ten sposób i nie musisz dalej edytować jego konfiguracji:

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

Zasadniczo krótkie podsumowanie oparte na mojej konfiguracji, dodaj następujące elementy do pliku 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>

To pozwala mi dodać wpis, taki jak:

127.0.0.1       test.dev

a następnie utwórz katalog, c: \ xampp \ sites \ dev \ test i umieść tam niezbędne pliki i to po prostu działa.

Inną opcją jest użycie <Directory>znaczników w apache.conf i odniesienie do stron z http: // localhost / project / .


Czy możesz używać symboli wieloznacznych w OSX?
cjm2671 16.10.11

Tak, używając Bind - clintberry.com/2011/…
Ryan Schumacher

30

Nie sądzę, że jest to możliwe.

W każdym razie musisz zmodyfikować wpisy wirtualnego katalogu apache za każdym razem, gdy dodajesz nową witrynę i lokalizację, więc synchronizacja nowej nazwy z plikiem vhost systemu Windows nie jest dużym problemem.

Aktualizacja: sprawdź następną odpowiedź i komentarze do tej odpowiedzi. Ta odpowiedź ma 6 lat i już nie jest poprawna.


3
Ale podczas korzystania z Nginx nie trzeba zmieniać pliku konfiguracyjnego Nginx, aby dodać nową grupę domen drugiego poziomu * .localhost. Jest to więc minus pliku hosts.
sergzach,

8
Wystarczy zaznaczyć, że gdy masz wielojęzyczną stronę internetową, możesz mieć <VirtualHost> z ServerAlias *.mydomain.localhost( *będącym kodem języka), abyś nie musiał edytować httpd.conf za każdym razem, gdy dodajesz nowy język; ale nadal musisz dodać subdomenę do pliku hosts, stąd znaczenie powyższego pytania.
Benjamin

10
Dynamiczne wirtualne hosty są tutaj słowem kluczowym i są obsługiwane przez większość serwerów, tj. Apache i Nginx. Więc nie, zdecydowanie nie musisz dotykać konfiguracji Apache za każdym razem, gdy tworzysz projekt.
Valentin Klinghammer,

2
Możemy również mieć hosty wirtualne z symbolami wieloznacznymi, to hostsnaprawdę
zależy

6

Aby dodać do świetnych sugestii już tutaj, XIP.IO to fantastyczny serwer DNS z wieloznacznymi danymi , który jest publicznie dostępny.

      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

(Możliwość określenia adresów innych niż sprzężenie zwrotne jest fantastyczna do testowania witryn na urządzeniach z iOS, na których nie można uzyskać dostępu do pliku hosts.)

Jeśli połączysz to z niektórymi konfiguracjami Apache wspomnianymi w innych odpowiedziach, możesz potencjalnie dodać VirtualHosts z zerową konfiguracją .


I działa dla członków twojego zespołu w przypadku adresu IP w twojej sieci LAN. Nie muszą instalować lokalnego serwera DNS z tym samym plikiem hosts.
Tobias Uhmann

4

Znalazłem wpis o korzystaniu z pliku hostów systemu Windows, który mówi również: „Niedozwolone są symbole wieloznaczne”.

W przeszłości dodawałem właśnie dodatkowe wpisy do pliku hosts, ponieważ (jak wcześniej wspomniano) nie jest to aż tak dużo pracy, gdy już edytujesz plik konfiguracyjny apache.


Im dłużej tworzysz plik hosts, tym dłużej potrwa przetwarzanie żądań. Nie jest to dobre rozwiązanie, jeśli masz dużo wpisów.
cchamberlain

4

Edytowanie pliku hosts nie jest uciążliwe po uruchomieniu polecenia „ipconfig / flushdns” z wiersza polecenia systemu Windows zamiast ponownego uruchamiania komputera.


1
nie opróżnia pamięci podręcznej dns przeglądarki, ale okna. Musi więc czekać 20-30 minut, aż przeglądarka zwolni buforowanie DNS.
Jacob Melvad Jensen

3

Możesz porozmawiać z administratorem sieci, aby utworzył dla ciebie domenę (powiedz „evilpuppetmaster.hell”) i umieścił tam symbol wieloznaczny, aby wszystko (* .evilpuppetmaster.hell) rozwiązało się z twoim adresem IP


1
Dzięki, ale to jest na devserver do domu, nie ma dostępnego DNS ani administratora sieci.
EvilPuppetMaster

OK, może masz dostęp do domeny lub znasz kogoś, kto to robi? Np .: * .evilpuppetmatser.arealdomain.com
Stu Thompson

Nie całkiem. Mimo to jest to maszyna domowa, więc otrzymuje nowy adres IP za każdym razem, gdy mój router łączy się z Internetem. Zewnętrzny serwer DNS nie pomógłby.
EvilPuppetMaster

1
1) Nie ma powodu * .evilpuppetmatser.arealdomain.com nie może rozwiązać problemu z wersją 127.0.0.1, 2) Nie sugeruję zewnętrznego serwera DNS. Sugeruję użycie subdomeny w prawdziwej domenie. Technicznie każdy może rozwiązać server.evp.arealdomain.com.
Stu Thompson,

3
Są też takie publiczne, jak * .127.0.0.1.xip.io i inne
Dave James Miller

3

Działa to przy użyciu wieloznacznego DNS na naszym lokalnym serwerze DNS: dodaj A rekord coś w rodzaju*.local -> 127.0.0.1

Myślę, że twoje ustawienia sieciowe będą musiały mieć wybrany sufiks domeny na liście wyszukiwania sufiksów domen dla komputerów w sieci, więc możesz chcieć zastąpić .localdomeną wewnętrzną swojej firmy (np. .int), A następnie dodać subdomenę, taką jak.localhost.int aby to wyjaśnić do czego to służy.

Tak *.localhost.intby rozwiązać, aby 127.0.0.1dla wszystkich w sieci i ustawienia pliku konfiguracyjnego dla wszystkich programistów będzie „tylko praca”, jeśli punkty końcowe powiesić się, że subdomena np site1.localhost.int,site2.localhost.int to jest dość dużo schemat wprowadziliśmy.

dnsmasq też wygląda ładnie, ale jeszcze go nie próbowałem: http://ihaveabackup.net/2012/06/28/using-wildcards-in-the-hosts-file/




2

Używam do tego DNSChef.

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

Musisz pobrać aplikację, w systemie Linux lub Mac potrzebujesz Pythona, aby ją uruchomić. Windows ma swój własny plik exe.

Musisz na przykład utworzyć plik ini z wpisami dns

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

Następnie musisz uruchomić aplikację dns z uprawnieniami administratora

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

lub w systemie Windows

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

Na koniec musisz skonfigurować jako jedyne DNS lokalne środowisko hosta (sieć, interfejs, dns lub podobne lub w linux /etc/resolv.conf).

Otóż ​​to


2

Zrobiłem to proste narzędzie, aby zastąpić gospodarzy. Obsługiwane są wyrażenia regularne. https://github.com/stackia/DNSAgent

Przykładowa konfiguracja:

[
    {
        "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

Nie mogłem znaleźć zakazu na piśmie, ale zgodnie z konwencją plik hostów systemu Windows ściśle podąża za plikiem hostów systemu UNIX i nie można w nim umieszczać odwołań do nazwy hosta ze znakiem zastępczym.

Jeśli czytasz stronę podręcznika, mówi:

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

Chociaż mówi:

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

to nie jest prawdą z praktycznego poziomu.

Zasadniczo kod, który przegląda plik / etc / hosts nie obsługuje wpisu z symbolem wieloznacznym.

Obejściem tego problemu jest wcześniejsze utworzenie wszystkich wpisów, być może użyj skryptu, aby umieścić kilkaset wpisów na raz.


0

@petah i Acrylic DNS Proxy to najlepsza odpowiedź, a na koniec wspomina o możliwości tworzenia wielu witryn przy użyciu Apache, który @jeremyasnyder opisuje nieco dalej ...

... jednak w naszym przypadku testujemy system hostingu z wieloma dzierżawcami, więc większość domen, które chcemy przetestować, idzie do tego samego virtualhost, a kilka innych jest skierowanych gdzie indziej.

W naszym przypadku po prostu używasz symboli zastępczych w ServerAliasdyrektywie, tak jak ...

ServerAlias *.foo.local

0

Oto całkowita konfiguracja dla osób próbujących osiągnąć cel (symbole wieloznaczne w środowisku deweloperskim, tj. XAMPP - w tym przykładzie zakłada się, że wszystkie witryny wskazują tę samą bazę kodów)

plik hosts (dodaj wpis)

plik:% SystemRoot% \ system32 \ drivers \ etc \ hosts

127.0.0.1   example.local

Konfiguracja httpd.conf (włącz vhosts)

plik: \ XAMPP \ etc \ httpd.conf

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

Konfiguracja httpd-vhosts.conf

plik: 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>

uruchom ponownie apache

utwórz plik pac:

zapisz jako cokolwiek.pac gdziekolwiek chcesz, a następnie załaduj plik do sieci przeglądarki> proxy> ustawienia auto_konfiguracji (załaduj ponownie, jeśli to zmienisz)

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

Nie działał, nie wiem jeszcze o PAC, ale ten wiersz „return” PROXY example.local ”; ' nie zwróciłby adresu IP serwera proxy do użycia przez przeglądarkę jako serwer proxy?
Ionut

0

Możesz do tego użyć echoipdns ( https://github.com/zapty/echoipdns ).

Po uruchomieniu echoipdns local wszystkich żądań poddomen .local przekierowuje się do 127.0.0.1, więc każda domena z xyz.local itp. Rozwiąże się do 127.0.0.1. Możesz użyć dowolnego innego sufiksu, a także po prostu zastąp lokalny wybraną nazwą.

Echoipdns jest jeszcze bardziej wydajny, jeśli chcesz używać adresu URL z innych komputerów w sieci, możesz go nadal używać przy zerowej konfiguracji.

Na przykład, jeśli twój adres IP komputera to 192.168.1.100, możesz teraz użyć nazwy domeny xyz.192-168-1-100.local, która zawsze rozwiąże się do 192.168.1.100. Tę magię wykonują echoipdns, patrząc na adres IP w drugiej części nazwy domeny i zwracając ten sam adres ip na zapytanie DNS. Będziesz musiał uruchomić echoipdns na komputerze, z którego chcesz uzyskać dostęp do zdalnego systemu.

echoipdns można również skonfigurować jako samodzielny serwer proxy DNS, więc po prostu wskazując ten DNS, możesz teraz korzystać ze wszystkich powyższych zalet bez uruchamiania specjalnego polecenia za każdym razem, a nawet możesz go używać z urządzeń mobilnych.

Zasadniczo upraszcza to zatem tworzenie DNS w oparciu o domenę wieloznaczną dla środowiska lokalnego i zespołowego.

echoipdns działa na komputerach Mac, Linux i Windows.

UWAGA: Jestem autorem echoipdns.


0

Konfiguracja automatycznej subdomeny config nginx z Acryl DNS Proxy

plik auto.conf dla twojego folderu stron 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;
    }
}

Dodaj do pliku hostów Acryl 127.0.0.1 example.com *.example.comi uruchom ponownie usługę Acryl. $ branch - nazwa twojej subdomeny.

Ustaw zamiast root / var / www / html / $ branch / public; twoja ścieżka projektu


0

Można to zrobić za pomocą Pi-Hole , po prostu edytuj „/ etc / hosts” i uruchom ponownie usługę dns.

nano /etc/hosts
pihole restartdns

Przykład:

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

Możesz użyć dynamicznego klienta DNS, takiego jak http://www.no-ip.com . Następnie za pomocą zewnętrznego serwera DNS CNAME * .mydomain.com do mydomain.no-ip.com.


2
które rozwiążą się na twoim zewnętrznym ip, i zwykle spowoduje to po prostu wyświetlenie strony konfiguracji routera / modemu
Sam

-1

Chociaż nie możesz dodać takiego symbolu wieloznacznego, możesz dodać pełną listę witryn, których potrzebujesz, przynajmniej do testowania, która działa wystarczająco dobrze dla mnie, w pliku hosts, po prostu dodajesz:

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


Myślę, że oryginalny plakat próbuje uniknąć kłopotów z tym krokiem.
Simon East
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.