Wprowadzenie
Subdomeny sÄ… wykorzystywane w Internecie na rozmaite sposoby. Oprócz roli czysto segregacyjnej, gdzie subdomena odpowiada pojedynczemu dziaÅ‚owi strony, używa siÄ™ ich także w charakterze odnoÅ›ników do znajdujÄ…cych siÄ™ na serwerach kont. Użytkownik, rejestrujÄ…c siÄ™ w serwisie, dostaje adres np. "login.jakisserwer.pl" oraz konto FTP, przez które może na nie wgrywać dane. Jednak każdy, kto zna podstawy obsÅ‚ugi Binda oraz Apache'a, może być nieco skonsternowany, jak taki efekt siÄ™ osiÄ…ga.
Obie aplikacje mają konfigurację opartą o pliki tekstowe. Dopisywanie do nich nowych informacji, a potem restartowanie przynajmniej jednego z nich jest przecież nie do pomyślenia. Artykuł ten przybliży bardzo elastyczną metodę zarządzania kontami na własnym serwerze. Zakładam, że czytelnik zna podstawy obsługi programu Bind 9 oraz Apache 2.0, zaś wszystko zostaje pokazane na przykładzie systemu operacyjnego Linux.
Wirtualne hosty
WiÄ™kszość domowych użytkowników serwera Apache wykorzystuje go do zarzÄ…dzania pojedynczÄ… stronkÄ… umieszczonÄ… w jakimÅ› dziwnym miejscu (np. /var/www albo nawet katalog htdocs). Wszystkie nadesÅ‚ane żądania obsÅ‚ugiwane sÄ… wtedy tak, jakby dotyczyÅ‚y tego wÅ‚aÅ›nie katalogu. Czasem dochodzi do tego opcja UserDir pozwalajÄ…ca na skonfigurowanie katalogu kont, do których dostÄ™p jest za pomocÄ… tyldy: www.serwer.pl/~uzytkownik. Apache posiada jednak znacznie wiÄ™ksze możliwoÅ›ci. Jedna kopia tego programu może obsÅ‚ugiwać wiele różnych stron WWW za pomocÄ… tzw. wirtualnych hostów (ang. virtual hosts). Termin ten okreÅ›la metody obsÅ‚ugi kilku różnych witryn przez pojedynczy komputer.
Poniższy przykÅ‚ad pokazuje, jak skonfigurować serwer WWW do obsÅ‚ugi dwóch różnych witryn. Kod ten znajduje siÄ™ w pliku httpd.conf w konfiguracji Apache'a:
# Witryna WWW serwera
<VirtualHost www.mojserwer.pl>
ServerName www.mojserwer.pl
DocumentRoot /home/users/serwer/www/
ErrorLog /home/users/serwer/logs/error_log
</VirtualHost>
# Strona domowa
<VirtualHost www.mojastrona.pl>
ServerName www.mojastrona.pl
DocumentRoot /home/users/ja/www/
ErrorLog /home/users/ja/logs/error_log
</VirtualHost>
Tak skonfigurowaliÅ›my dwa wirtualne hosty dla naszych dwóch stron. W każdym z nich podajemy nazwÄ™ serwera, katalog z plikami witryny oraz Å›cieżkÄ™ dziennika błędów. Opcji jest znacznie wiÄ™cej (np. można skonfigurować osobne komunikaty błędów HTTP dla każdej z podstron, czy e-mail administratora). Trzeba tu zwrócić uwagÄ™ na pewien istotny mankament powyższego rozwiÄ…zania. Każda z naszych podstron wymaga osobnego adresu IP, a to w przypadku wiÄ™kszego ruchu jest niemożliwe.
Jest tak, ponieważ tak naprawdÄ™ żądanie HTTP zawiera sam adres IP serwera i nie niesie ze sobÄ… żadnych informacji o wykorzystanej domenie, która tÅ‚umaczona jest na komputerze użytkownika w indywidualnym zakresie przez przeglÄ…darkÄ™. Tak w ogóle przy takich ustawieniach w znaczniku zaleca siÄ™ pisanie wÅ‚aÅ›nie adresu IP, ale jako że to jest artykuÅ‚, nie chcÄ™ tu reklamować czyjegoÅ› połączenia z sieciÄ… :).
Wirtualne hosty bazujÄ…ce na nazwie
ZaprzeczÄ™ teraz trochÄ™ temu, co pisaÅ‚em powyżej. Konkretniej mam na myÅ›li fragment mówiÄ…cy, że w żądaniu HTTP nie ma wzmianki o domenie. Nie jest to do koÅ„ca prawda. Wszystko zależy po prostu od przeglÄ…darki. Okazuje siÄ™, że praktycznie wszystkie bÄ™dÄ…ce obecnie w użyciu zachowujÄ… nazwÄ™ domeny w żądaniu jako informacjÄ™ dodatkowÄ…. Apache potrafi to wykorzystać i tu stykamy siÄ™ z wirtualnymi hostami bazujÄ…cymi na nazwie domeny (ang. name-based virtual hosts). KÅ‚opot z ich obsÅ‚ugÄ… majÄ… jedynie bardzo stare przeglÄ…darki, niewysyÅ‚ajÄ…ce potrzebnych danych. UżywajÄ…cy ich ludzie zawsze zobaczÄ… stronÄ™ gÅ‚ównÄ… serwera bez wzglÄ™du na wpisywany adres WWW. Aby aktywować ten sposób obsÅ‚ugi wirtualnych hostów, wystarczy dokleić przed ich deklaracjÄ… jednÄ… dyrektywÄ™:
NameVirtualHost adres_ip
Teraz jesteÅ›my gotowi do obsÅ‚ugi kilku różnych witryn z różnymi domenami, wspóÅ‚dzielÄ…cymi jeden adres IP.
Jeżeli pragniemy zachować kompatybilność z antykami, możemy dodać także do konfiguracji każdego wirtualnego hosta linijkę:
ServerPath /podstrona
AplikujÄ…c to do podanych wyżej ustawieÅ„, bÄ™dziemy mogli odwoÅ‚ać siÄ™ do naszej strony domowej na dwa sposoby: www.mojastrona.pl oraz www.mojserwer.pl/mojastrona. Zastanów siÄ™, czy w ogóle warto siÄ™ tym zajmować. Autorzy dokumentacji Apache'a twierdzÄ…, że pod sÅ‚owem "old clients" rozumiejÄ… naprawdÄ™ stare przeglÄ…darki i wyrażajÄ… swÄ… wÄ…tpliwość, czy na Å›wiecie jest na tyle dużo zdrowych na umyÅ›le ludzi, by wciąż ich używać.
Konfiguracja bez dopisywanek
Z powyższÄ… konfiguracjÄ… jest taki kÅ‚opot, że nie da siÄ™ jej zastosować na skalÄ™ przemysÅ‚owÄ…. ZarzÄ…dzanie megaplikiem httpd.conf oraz równie rozbudowanym plikiem strefy w Bindzie zabiÅ‚oby wiÄ™kszość serwerów. GoÅ›cinnie Å›wiadczÄ™ usÅ‚ugi administracyjne szkolnemu serwerowi i trapiÅ‚o mnie, jak sprawić, aby każdy uczeÅ„ mógÅ‚ odstać siÄ™ do swojego konta poprzez intuicyjne http://login.loken.pl zamiast bawić siÄ™ z tyldami.
DrugÄ… przyczynÄ… byÅ‚a wzrastajÄ…ca ilość subdomen szkolnej witryny WWW. Edytowanie konfiguracji oraz rozrzucenie katalogów po dysku byÅ‚y bardzo mÄ™czÄ…ce. PostanowiÅ‚em ubić kilka pieczeni na jednym ogniu i przy okazji ujednolicić zarzÄ…dzanie podstronami gÅ‚ównej witryny. Poszczególne subdomeny miaÅ‚y stać siÄ™ zwyczajnymi użytkownikami serwera z wÅ‚asnym kontem FTP oraz katalogiem domowym ulokowanym normalnie w /home, co ukróciÅ‚oby samowolkÄ™ i brak jakiejkolwiek systematycznoÅ›ci. Ponadto, dziÄ™ki potraktowaniu tego tak samo, jak użytkowników, automatycznie tworzyÅ‚aby siÄ™ obsÅ‚uga subdomeny. TrapiÅ‚o mnie tylko, jak to wszystko można wykonać.
Na poczÄ…tku braÅ‚em pod uwagÄ™ możliwość jakichÅ› tajemnych modyfikacji kodu źródÅ‚owego Apache'a oraz Binda, ale dość szybko to odrzuciÅ‚em. Stron korzystajÄ…cych z takiego rozwiÄ…zania sÄ… tysiÄ…ce i na pewno ktoÅ› by już dawno zrobiÅ‚ z tego odpowiedni moduÅ‚. Dlatego wziÄ…Å‚em na tapetÄ™ to, co oba demony nam oferujÄ… domyÅ›lnie. Nie bawiÄ…c siÄ™ w opis, jak do czego doszedÅ‚em, przechodzÄ™ teraz do konkretów.
Od strony Binda sprawa wygląda prosto. Wystarczy do pliku strefy w miejsce wszystkich subdomen utworzyć jeden rekord CNAME:
# CNAME mojserwer.pl.
Znak haszu oznacza, że serwer DNS będzie teraz akceptować dosłownie wszystkie nadchodzące subdomeny. Restartujemy demona named i już nie musimy bawić się w modyfikowanie konfiguracji Binda przy dodawaniu nowego użytkownika. Pozostał nam Apache. Tu z pomocą przychodzi nam moduł mod_vhost_alias. Na początek upewniamy się, że dyrektywa UseCanonicalNames ustawiona jest na "Off". Następnie pod dyrektywą NamedVirtualHost dopisujemy
VirtualDocumentRoot /home/%-3/www
Usuwamy stare wpisy wirtualnych hostów, restartujemy serwer i gotowe. CiÄ…g %-3 oznacza odwoÅ‚anie siÄ™ do odpowiedniej części wpisanego przez internautÄ™ adresu WWW, w tym przypadku loginu zawartego w domenie: login.mojserwer.pl. CiÄ…g %0 przechowuje całą nazwÄ™ domeny. Teraz caÅ‚a zabawa z wirtualnymi hostami ogranicza siÄ™ jedynie do utworzenia systemowego użytkownika oraz jego katalogu domowego. Wszystko odbyÅ‚o siÄ™ bez napisania ani jednej linijki kodu, czy to w Bashu, czy w C.
Zakończenie
DziÄ™ki dynamicznym wirtualnym hostom wprowadziÅ‚em Å‚ad w strukturze serwera. Mam nadziejÄ™, że artykuÅ‚ ten przyda siÄ™ też innym, gdyż prawdÄ™ mówiÄ…c nawet na angielskich stronach ciężko mi byÅ‚o poczÄ…tkowo znaleźć o tym jakiekolwiek użyteczne informacje (o polskich nawet nie ma co wspominać). Å»yczÄ™ przyjemnego konfigurowania. Bardziej szczegóÅ‚owych informacji o wirtualnych hostach udzieli Ci dokumentacja Apache'a znajdujÄ…ca siÄ™ na stronie httpd.apache.org.
ŹródÅ‚o: http://artykuly.zyxist.com/
Listing
Ranga: Administrator serwisu Punktów: 38473

