Mám ve zvyku vyvíjet a spouštět webové aplikace na doménách
s příponou .l
, takže třeba vývojová verze
https://nette.org
mi běží na http://nette.l
. Což
znamená přidat do souboru hosts
řádek pro každou
subdoménu, např.:
nette.l 127.0.0.1 www.nette.l 127.0.0.1 forum.nette.l 127.0.0.1
To je přinejmenším otravné. Kéž by hosts
podporoval zápis
pomocí wildcards, stačilo by napsat
*.l 127.0.0.1
a měl bych vystaráno. Jenže tohle nefunguje. Hledal jsem proto jiné řešení. K velkému překvapení, internet se návody nejen že nehemží, nenašel jsem vůbec nic.
Bylo zřejmé, že budu potřebovat najít lokální DNS server, který toto
umožní. Narazil jsem na Simple DNS
Plus. Po instalaci je potřeba jej manuálně aktivovat, tj. říci
síťovému připojení, že má používat DNS server na adrese
127.0.0.1. Poté přímo v aplikaci v Tools / Options / Plug-Ins vytvořit
instanci pluginu Regular Expressions a určit, že maska \.l$
se
bude mapovat na adresu 127.0.0.1.
Funguje to výborně, jen cena $79 mi nepřipadá odpovídající, využívám-li okrajové vlastnosti jinak našlapaného programu.
Další možností je instalace multiplatformního opensource DNS serveru BIND. Stáhl jsem si distribuci pro
Windows a nainstaloval do výchozího adresáře. Ovšem zapomeňte na nějaké
klikací prostředí, BIND zná jen příkazovou řádku a textové
konfigurační soubory. Pro mě španělská vesnice. Naštěstí mě pohled do
dokumentace neodradil rovnou a
podařilo se mi vytvořit konfigurační soubory. Ty se nacházejí
v podadresáři etc
, v mém případě je to
c:\Windows\System32\dns\etc\
. Na vašem počítači může být
cesta odlišná.
Soubor etc\named.conf
options { directory "C:\Windows\System32\dns\etc"; // změňte pokud používáte jinou cestu. }; zone "localhost" { type master; file "localhost"; }; zone "l" { type master; file "localhost"; }; zone "0.0.127.in-addr.arpa" { type master; file "localhost.rev"; };
Sourbor etc\localhost
(využívající wildcard DNS
record)
$TTL 86400 @ IN SOA @ root ( 2005022501 ; serial 3H ; refresh 15M ; retry 1W ; expiry 1D ) ; minimum IN NS @ IN A 127.0.0.1 *.l. IN A 127.0.0.1
a nakonec soubor etc\localhost.rev
$TTL 86400 @ IN SOA localhost. root.localhost. ( 2005022501 ; serial 3H ; refresh 15M ; retry 1W ; expiry 1D ) ; minimum IN NS localhost. 1 IN PTR localhost.
Poté stačí na síťovém připojení aktivovat DNS server na adrese 127.0.0.1 (viz postup výše) a spustit službu ISC BIND. Světe div se, ono to funguje!
C:\>ping nette.l Příkaz PING na nette.l [127.0.0.1] - 32 bajtů dat: Odpověď od 127.0.0.1: bajty=32 čas < 1ms TTL=128
Komentáře
Jakub Bouček #1
Děkuji, to je spása!!!
Kenn #2
Při pohledu na postup se nejspíš spokojím s localhost/mujweb :) každopádně lokální DNS zní lákavě a nejspíš ho vyzkouším.
karf #3
Díky za tento článek. Před časem jsem si prošel stejnou cestou až k BINDu, kde mě ovšem pohled do dokumentace odradil.
golf #4
Zdar,
zajimavý typ. Také jsem se tím trápil. Nakonec jsem to vyřešil tak, že všechny projekty mám v adresáři …/dev/sub. Mám PHP skript, který spustím, on projde podadresáře v …/dev/sub a pro každý podadresář vytvoří konfiguraci do apache (virtual host) a zároveň zapíše subdom0nu do hosts. Pak je3t2 restartuje apache pomocí exec(apache restart). Takže celé nastavení nové subdomény spočívá ve spuštění jednoho skriptu „php server.php“
ZETCHA #5
Ještě jsem našel open source Dual DHCP DNS Server jen jsem se nedostal k tomu ho nakonfigurovat. Super je, že ho lze mít jako „portable“ a spouštět ho např z flash disku (můj případ).
Jaroslav Moravec #6
Heuréka! Děkujeme za hotové řešení. Doteď jsem to řešil scriptem na tvorbu nového projektu, který mi zanesl všechny údaje do hosts i httpd.conf, tohle mi ještě věci zpřehlední a usnadní.
Jiří Landsman #7
díky za řešení :) Ještě by to chtělo nějaké řešení nastavení virtualhostu abych se nemusel nastavovat ani s tim :) aby treba pro domenu .l zpristupnil soubory ve slozce D:\www :)
Almad #8
Na těch unixech jde nastavit „hledej v dns a když nenajdeš hledej na doméně X a když nenajdeš hledej na localhostu“.
Bez dns serveru…
tiso #9
#4 golfe, tiež používam taký skript, ale reštartoval som vždy manuálne. Netušil som že exec ide použiť aj takto (odpíliť si konár na ktorom sedíš).
DG: užitočné, viem že Apache nie je jediný server, budem musieť vyskúšať ďalšie.
Martin Pešava #10
Díky, určitě to hned vyzkouším … tušil jsem, že to nějak půjde, ale neměl jsem dosud čas to zkoušet.
Co se týče komentářů výše, tak víte o tom, že apache umožňuje používat tzv. VirtualDocumentRoot?
<VirtualHost *:80>
UseCanonicalName Off
ServerName local
ServerAlias *.local
VirtualDocumentRoot C:/Dokumenty/WWW-local/%1/
</VirtualHost>
a pak už stačí jenom správně nasměrovat DNSko a není potřeba pro každej projekt zakládat konfiguraci do httpd.conf (samozřejmě, pokud některý nepotřebuje jinak nastavený apache)
… nicmene se to da kombinovat, takze pokud ma mit jedna domena jinou konfiguraci, muzete nejdriv udelat
<virtualhost>
pro neco.local a pak teprve uvest toto … apache to prochazi postupne a zastavi se pri prvni schode :)Martin Pešava #11
#10 Martine Pešavo, sakryš, vždyť to v tom náhledu vypadalo správně …
… chybí tam </VirtualHost>
Jiří Landsman #12
#10 Martine Pešavo, díky to bude přesně to co jsem hledal :)
karf #13
#10 Martine Pešavo, Bohužel VirtualDocumentRoot nefunguje zcela transparentně – proměnná DOCUMENT_ROOT pak směřuje na skutečný, nikoliv virtuální root, takže php skript s tím musí počítat.
nesro #14
Já bych danou situaci řešil takhle:
do souboru /etc/hosts přidám řádek s:
127.0.0.1 nette.l
a do souboru /etc/apache2/sites-available/default :
<VirtualHost *:80>
DocumentRoot /home/nesro/nettephp/
ServerName nette.l
< / Virtual Host > (bez mezer)
asi to není nejlepší řešení, ale když jsem to takhle řešil já, byl jsem spokojenej. Ovšem je to řešení pro linux, ale není problém si udělat virtualbox.
cniry #15
super :) jdu googlit jak to udělat na linuxu
ic #16
Používal jsem osobní DNS TreeWalk ta byla zdarma a i těch 127.0.0.1 do nastavení sítě uměla vyplnit automaticky (pokud byl program zapnut, pokud ne vrátil původní hodnotu) jenže můj slabší počítač byl tímto programam příliš zatížen tak musel z domu. Říkám si jestli není snadnější vyplnit hosts než absolvovat takovéto pokusy na lidech a jejich počítačích.
nesro #17
#14 nesro, kdyby to někdo zkoušel, tak za 127.0.0.1 musí být tabulátor, ne mezera
Koubas #18
Pokud si nechcete rozjíždět DNS lokálně, tak si můžete podobný záznam klidně přidat do zónového souboru nějaké své domény přes administrovátko u registrátora/hostignu, např.:
*.l A 127.0.0.1
a pak cokoliv.l.domena.cz bude resolvit na 127.0.0.1, akorát to nebude fungovat offline.
golf #19
#9 tiso, spouštím ten skript z příkazové řádky, takže apache se to netýká a konár na ktorom sedím sa neodpílí 🙂
optik #20
Jen takový detail, asi by se neměla dělat konfigurace dvou domén (.localhost,.l) jedním zónovým souborem. Jinak osobně bych raději použil .test, to je myslím k tomu účelu i vyhrazené od IANY nebo tak něco. Časem možná na .l něco bude 🙂 a pak se na něj nedostaneš.
Oswald #21
Přesně tohle jsem nedávno řešil pro linux, tady je kdyžtak návod, jak na to:
http://blog.webkitchen.cz/virtualhosty
Marek Hrabě #22
#20 optiku, Samozřejmě, že dostane. Jak tě mohl napadnout opak?
optik #23
#22 Marku Hrabě, Řekl bych, že pokud by měl to své lokální dns jako první v pořadí resolvování, tak už by se asi na nově vzniknuvší l. nedostal, vždycky by skončil na localhostu, pokud až jako druhé/další, tak se pak zase nedostane na ten svůj lokální l. Druhá věc je, že pravděpodobně to dns zapíná a vypíná jen při vývoji. Každopádně s vzniknuvším l. by to mohlo mít trochu zmatečné chování.
v6ak #24
Je jednopísmenková TLD povolena? Nejsem si jist.
pepazdepa #25
asi byste potrebovali toto :)
https://web.archive.org/…s:80/adsuck/
Čuga #26
A co když to světe div se nefunguje??? :) Nainstaloval sem BIND, vytvoril konfiguracni soubory, nahodil DNS server jako 127.0.0.1 a prdlajz :) je potřeba instalovat i ten Simple DNS nebo ni???
Forrest79 #27
Ahoj,
neví někdo jak donutit Windows, aby pokud nejsem připojenej k žádný sítí, brali v potaz lokálkní DNS server stejně jako soubor hosts? Občas se mi stane, že programuju v končinách, kde neni žádný připojení k internetu a tam je mi lokální DNS server na nic :(
pokusnicek #28
#27 Forrest79, japato?
Matej #29
#14 nesro, Diky, tohle mi pro zacatek bude stacit. Ale urcite casem vyzkousim i automatiku, co je popsana v clanku.
pmajster #30
presne toto som sa snažil riešiť a nájst nejaké riešenie cez vianocne a neúspešne… a teraz som tu na to natrafil úplne náhodou :)
moja situacia bola: chcel som na testovacie účely používať lokálne doménu .xx a aby všetko smerovala na server vo virtualboxe, kde by už ostatné riešil apache (snaha pohodlne sa priblížiť reálnej situácii- nepracovať s localhostom a mať možnosť využívat subdomény a .htaccess).
skúšal som bind, dnsmasq, no nepodarilo sa mi úspešne do funkčného stavu nakonfigurovať ani jeden dns server, tak aby to pracovalo podľa očakávaní.
skúsim to podľa tvojho návodu ešte raz s bind a podľa toho čo postol #21 Oswald aj s dnsmasq;)
čo sa týka toho virtual hostingu, tak myslím že ideálne riešenie v tomto prípade by mohlo byť využitie dynamického virtuálneho hostingu, apache má na to mod_vhost_aliases, niečo nájdete napr. v tejto knihe: Linux – administrace serveru Apache, kapitola 6.4 sa zaoberá danou tématikou http://goo.gl/8MsU
riešenie zbiehať akékoľvek skripty po zmene/vytvorení projektov mi príde dost nepraktické…
Dragonn #31
#24 v6aku, Jednopísménné TLD nejsou povolené jako meznárodní. Klasická TLD má co já vim 2–4 znaky. Ale pro použití v privátní síti nebo na localhostu můžeš mít klidně i TLD *.jakdlouhouchces, pokud se nepletu.
#27 Forrest79, Tohle jsem přesně nepochopil. Mělo by to fungovat tak, že ti na localhostu poběží DNS server (třeba již zmíněný bind), tvůj primární DNS server budeš mít nastavenej 127.0.0.1 a bind bude mít nastavený forward neznámých požadavků na DNS server, který jsi měl doteď.
To, co jsem napsal Forrestovi souvisí s mým problémem a tím, proč jsem zatím ještě nezačal používat to, o čem David napsal. Můj prakticky jediný používaný počítač je notebook a s ním přecházím mezi třemi poskytovateli internetu, někdy i více. Některé připojení mám nastavené staticky a jiné dynamicky od DHCP serveru. Když v systému nastavím dns server na localhost mám teďko dva problémy:
Prozatím ručně edituji /etc/hosts, protože nevytvářím subdomény tak často. Zároveň, pokud by někdo měl zájem, tak používám virtual document root v apache2:
DocumentRoot /home/dragonn/web
UseCanonicalName Off
VirtualDocumentRoot /home/dragonn/web/%-2/www
jtousek #32
Netuším, co dělám špatně, ale nemohu spustit tu službu ISC BIND, pořád to hází chybu 1069 = chyba přihlášení.
Honza #33
Výborný článek, moc mi pomohl 🙂
Pavol Biely #34
Jednoduché riešenie, ktoré umožní zapisovať hostnames ako
127.0.0.1 *.l
je použitie programu AcrylicStačí ho zapnúť ako službu a nastaviť si primárne DNS na 127.0.0.1.
Tento článek byl uzavřen. Už není možné k němu přidávat komentáře.