czwartek, 7 lutego 2008

Lepszy Apache - wprowadzamy małe zmiany w httpd.conf - #2 vHosty

Witam w drugiej części mojego małego tutorialu dotyczącego modyfikacji httpd.conf :) Trochę wody w rzece upłynęło od ostatniego artykułu, ale wiadomo co było tego powodem: standardowo brak czasu, zajęcia o wyższym priorytecie, odrobinka lenistwa, no i oczywiście sesja ;p Ale do rzeczy. Poprzednio pisałem o tym jak wpuścić Apache'a do katalogów userów przy pomocy userdir_module. Dzisiaj część druga mojego wywodu.

Czymże są wirtualne hosty (vhost)? Tak najprościej mówiąc, vhosty dają nam możliwość utrzymywania na jednej maszynie wielu niezależnych domen. Na nich opiera się praktycznie cały hosting tego świata - wirtualny oczywiście. Dzięki nim Onet i Nasza-klasa mogą stać na jednym serwerze ;) Pokrótce - na czym to wszystko polega? Idea jest prosta: parkujemy domenę na serwerze i podpinamy ją pod swój public_html, uzyskując tym samym dostęp do niego za pomocą fajnego www.mojsexiadresik.pl, a nie paskudnego www.okropnyadresmojegoprovidera.com.pl/~mojasexistronka/ ;p Kwestię parkowania domeny sobie tutaj pominiemy i zajmiemy się tylko podpięciem jej pod wybrany katalog. No dobra, ale ktoś zapyta jak podpiąć domenę, której nie ma? Słuszna uwaga. Cały problem ominiemy poprzez wykorzystanie fikcyjnej domeny i wymuszenia na Fedorze przekierowania jej na localhost. Już mówię jak to zrobić, sprawa jest na prawdę banalna.

Po pierwsze - trzeba włączyć na Apache'u mod UserDir (tutorial). Będę opisywał wszystko na przykładowej, utworzonej w ostatnim artykule stronie http://localhost/~sdr/, więc kto nie czytał powinien nadrobić zaległości (a arty miały być niezależne od siebie ;D).

Jeżeli wszystko działa jak należy i po wpisaniu w przeglądarce powyższego adresu naszym oczom ukazuje się wielkie Hello world!, możemy przystąpić do edycji pliku konfiguracyjnego. Logujemy się na roota i otwieramy plik.

vim /etc/httpd/conf/httpd.conf

Około linii 180 odszukujemy coś co nazywa się

LoadModule vhost_alias_module modules/mod_vhost_alias.so

Linia nie powinna być zahaszowana, ale jeśli jest inaczej, usuwamy sprzed niej znak #. Następnie przechodzimy w okolice linii 954, gdzie rozpoczyna się sekcja konfiguracji vhostów. Kilka linii niżej zobaczyć można pierwszy z dwóch interesujących nas tutaj fragmentów.

# Use name-based virtual hosting.

Bezpośrednio pod nim umieszczamy dodatkową linijkę.

NameVirtualHost 127.0.0.2:80

Należy zwrócić szczególną uwagę na podany IP pętli zwrotnej (localhosta). Nie wpisujemy 127.0.0.1 (jak to standardowo czynimy w celu uzyskania dostępu do bieżącego komputera), ale 127.0.0.2 - to ważne. Jeszcze nie wiem dlaczego, ale kiedy wpisywałem u siebie jedynkę, miałem potem różne śmieszne problemy.

Tip: Od razu zaznaczę, że dla każdego kolejnego vhosta przyporządkowuje się następny numerek w ostatnim oktecie adresu. Ważne, aby wszytkie vhosty były kierowane na inne adresy (127.0.0.2, 127.0.0.3, itd). Konieczne jest też dodanie po adresie numeru portu. Zawsze wpisujemy domyślny 80. Kolejne adresy można dopisywać jeden pod drugim.

Teraz przechodzimy jeszcze niżej. Zapewne w oczy rzuca się Wam przykładowy blok konfiguracyjny vhosta.

#<VirtualHost *:80>
# ServerAdmin webmaster@dummy-host.example.com
# DocumentRoot /www/docs/dummy-host.example.com
# ServerName dummy-host.example.com
# ErrorLog logs/dummy-host.example.com-error_log
# CustomLog logs/dummy-host.example.com-access_log common
#</VirtualHost>

Do takiego bloku jak widać można wpisać trochę różnych dyrektyw. Nam jednak na własne potrzeby wystarczą tylko te najważniejsze.

<VirtualHost 127.0.0.2:80>
ServerAdmin webmaster@sdr.lh
DocumentRoot /home/sdr/public_html
ServerName sdr.lh
ServerAlias *.sdr.lh
</VirtualHost>

ServerAdmin to adres e-mail admina serwera. W sumie można tu wpisać taki adres jaki tylko chcemy. Będzie on wyświetlany np na stronach błędów serwera.
DocumentRoot definiuje ścieżkę dostępu do katalogu, pod który chcemy podpiąć naszą domenkę.
ServerName - tutaj podajemy nazwę podpinanej domeny (bez żadnych gadżetów typu www czy http:// oczywiście ;]). Również tutaj wpisać możemy co nam się tylko spodoba, nawet bardzolubie.mojastronke ;p Możemy, bo tak jak wcześniej zaznaczyłem będziemy używać tego jedynie dla siebie. Jednak, aby nie przeginać zbytnio, wykorzystujemy tradycyjną domenę najwyższego poziomu (TLD), 2-literową. Najlepiej skorzystać z nieistniejącej domeny, ale o tym później. Ja wykorzystuję .lh - skrót od localhost.
ServerAlias to bardzo fajna opcja, która stosunkowo często przydaje się w prawdziwej sieci. Pełni ona rolę drugiej nazwy, ale częściej chyba jest wykorzystywana do uaktywniania tzw. wildcarda (krótko mówiąc, nakazuje serwerowi wychwytywać wszystkie nieistniejące subdomeny i przekierowywać żądania do domeny głównej - coś Wam to mówi? Taaak, aliasy www ;D).
ErrorLog i CustomLog służą odpowiednio do logowania w plikach dziennika błędów i każdej próby dostępu do jakiegokolwiek pliku na serwerze. Te dyrektywy pozwalają nam ustalić miejsce, w którym wszystko będzie się zapisywało.

Zapisujemy zmiany w pliku httpd.conf i restartujemy serwer. Gdy Apache wróci do siebie, otwieramy do edycji drugi plik.

vim /etc/hosts

To ważny plik systemowy, w którym zapisywane są na sztywno nazwy hosta i przypisane im adresy IP. Domyślnie znajduje się tam tylko jeden host - właśnie pętla zwrotna - gdyż cała reszta świata jest odsługiwana dynamicznie poprzez serwery DNS, tak? Plik powinien zawierać mniej więcej coś takiego:

# Do not remove the following line, or various programs
# that require network functionality will fail.
::1 localhost.localdomain localhost

Tip: Na samej górze zawarte jest bardzo istotne ostrzeżenie odnośnie usuwania umieszczonej w pliku domyślnej linii. Naprawdę, nie polecam. Możecie się zdziwić jak wiele od niej zależy :)

W każdym bądź razie, pierwsza linia za bardzo nas nie intersuje. My dopisujemy się pod spodem.
127.0.0.2 sdr.lh www.sdr.lh blog.sdr.lh


Każdy taki wpis (linia) jest zbudowany zasadniczo z trzech kolumn tekstu, oddzielonych od siebie znakami tabulatora. Pierwsza linia to IP, na który zostanie przekierowany ruch. Druga kolumna do nazwa domeny. Trzecia (i każda kolejna po tabulatorze) to alias dla nazwy domeny. Tutaj niestety nie działa gwiazdka (wildcard) i każda subdomena extra, która ma zostać przekierowana musi zostać wpisana na sztywno. Dobrze chociaż, że DNS nie ma takich problemów ;> Kiedy skończysz edycję pliku, zapisz zmiany i zamknij go.

Teraz można wykonać próbę. Wpisz do paska adresu przeglądarki sdr.lh, www.sdr.lh lub blog.sdr.lh. W każdym z przypadków powinieneś zobaczyć stronę Hello world! umieszczoną w swoim katalogu domowym.

Pozostaje jeszcze pytanie, po co vhosty na localu? Ano np po to, żeby móc sprawdzić działanie projektowanej witryny w warunkach rzeczywistych. Jeżeli piszemy CMS dla konkretnej strony dysponującej domeną np sdr.pl, to dużo łatwiej będzie nam się go testowało jeśli będziemy mogli go uruchomić w warunkach podobnych do tych naturalnych, czyli pod adresem sdr.lh zamiast localhost/~sdr/ - nieprawdaż?

No dobra, ale dlaczego nie powinienem używać do testów np domeny .pl? Odpowiedź jest prosta: ponieważ domena, którą sobie wybierzesz, nawet jeśli teraz nie istnieje, kiedyś może zostać zarejestrowana. Wówczas spotka Cię nieprzyjemna niespodzianka - zamiast właściwej strony, zobaczysz swoje Hello world! :) Zresztą możesz to sprawdzić już teraz. Wystarczy, że w pliku /etc/hosts zamiast sdr.lh wpiszesz np onet.pl :> Domena .lh nie istnieje i zapewne już nie powstanie, więc można z niej bezpiecznie korzystać.

Dzisiaj to by było na tyle. W kolejnym artykule, przedstawię instalację baz danych PostgreSQL na Fedorze. Z tym jest trochę trudniej niż z MySQL, ale tylko trochę :) Tymczasem zapraszam do głosowania w nowej ankiecie. Jednocześnie dziękuję za Waszą wiarę w tego bloga, którą potwierdzają wyniki poprzedniej sondy.

Zauważyłeś błąd w artykule? Coś nie działa? Zostaw swoje uwagi w komentarzach.

2 komentarze:

Anonimowy pisze...

Człowieku, no tego mi brakowało! :) Swoją drogą szkoda, że tak mało piszesz. Bardzo ciekawe artykuły, bardzo przydatne.

Dawid Pająk pisze...

W00t, komentarz! :) Hehe, dzięki wielkie za Twoją opinię. Mam nadzieję, że jeszcze wpadniesz. No faktycznie trochę czasu minęło od ostatniego posta (znowu!), ale fakt faktem, że tego bloga piszę raczej dorywczo. Postaram się coś skrobnąć w najbliższym czasie, może 2 - 3 szybkie artykuły.