[Debian] LAMP – 2. Hosty wirtualne (vhosty) Apache

Dzięki hostom wirtualnym możliwy jest hosting wielu stron WWW pod różnymi adresami (domenami DNS) na jednym serwerze z jednym adresem IP. Np. e00.eu, vps-admin.eu, olo-web.eu itp. Każda z domen musi być oczywiście odpowiednio skonfigurowana, tak aby wskazywała rekordem A na adres IP naszego serwera. Więcej nt. działania systemu DNS, opisałem tutaj.

Pierwotnie, protokół HTTP (w wersji 1.0), w zapytaniu do serwera pozwalał przesłać jedynie identyfikator pliku oraz typ żądania (najczęściej GET – czyli żądanie przesłania strony/pliku). Zostało to pokazane na poniższym listingu. Fragment będący zapytaniem, czyli ten przesyłany od naszego komputera do serwera, znajduje się piątej linii.

root@e00:~# telnet olo-web.eu 80
Trying 46.41.129.59...
Connected to olo-web.eu.
Escape character is '^]'.
GET /



Default Parallels Plesk Panel Page
[...]

Od wersji 1.1 protokołu HTTP, w żądaniu, możliwe jest także przesłanie nazwy domeny (Host: przykladowa.pl) i własnie to, umożliwia działanie hostom wirtualnym. Żądanie wysłane przeze mnie do serwera znajduje się w liniach nr. 5 i 6.

root@e00:~# telnet olo-web.eu 80
Trying 46.41.129.59...
Connected to olo-web.eu.
Escape character is '^]'.
GET / HTTP/1.1
Host: olo-web.eu

HTTP/1.1 200 OK
Date: Fri, 11 Jan 2013 00:10:26 GMT
Server: Apache
Last-Modified: Mon, 31 Dec 2012 18:42:09 GMT
ETag: "2688c357-72b-4d22a5edf6240"
Accept-Ranges: bytes
Content-Length: 1835
X-Powered-By: PleskLin
MS-Author-Via: DAV
Connection: close
Content-Type: text/html





OLO-WEB.EU
[...]

Dodawanie vhosta

1. Logujemy się po SSH na root-a.

2. Tworzymy nowe konto użytkownika. Zamiast vps-admin.eu wpisujemy nazwę swojej domeny którą chcemy dodać.

useradd -m vps-admin.eu

3. Ustawiamy hasło nowemu użytkownikowi.

passwd vps-admin.eu

4. Tworzymy 3 podkatalogi – htdocs, cgi-bin oraz logs w katalogu domowym nowego użytkownika.

mkdir /home/vps-admin.eu/{htdocs,cgi-bin,logs}

5. Zmieniamy właściciela tych katalogów na utworzonego użytkonika.

chown vps-admin.eu:vps-admin.eu /home/vps-admin.eu/htdocs
chown vps-admin.eu:vps-admin.eu /home/vps-admin.eu/cgi-bin
chown vps-admin.eu:vps-admin.eu /home/vps-admin.eu/logs

6. Tworzymy prosty plik index.php i ustawiamy jego właściciela na nowo-utworzonego użytkownika.

echo "" > /home/vps-admin.eu/htdocs/index.php
chown vps-admin.eu:vps-admin.eu /home/vps-admin.eu/htdocs/index.php

Zawartość pliku – , to kod PHP powodujący wyświetlanie strony informacyjnej nt. serwera WWW, parsera PHP i załadowanych modułów.

7. Instalujemy edytor tekstu nano. Będzie on potrzeby do edycji pliku konfiguracyjnego vhosta.

apt-get update
apt-get install nano

8. Edytujemy plik konfiguracyjny vhosta.

nano /etc/apache2/sites-available/vps-admin.eu

9. Zaznaczamy poniższy tekst, kopiujemy go do schowka za pomocą kombinacji klawiszy CTRL+C i wklejamy do PuTTY klikając PPM (prawym przyciskiem myszy).


    ServerAdmin webmaster@vps-admin.eu
    ServerName vps-admin.eu
    ServerAlias www.vps-admin.eu
    
    DocumentRoot /home/vps-admin.eu/htdocs
    
        Options FollowSymLinks
        AllowOverride None
    
    
        Options Indexes FollowSymLinks MultiViews
        AllowOverride None
        Order allow,deny
        allow from all
    
    
    ScriptAlias /cgi-bin/ /home/vps-admin.eu/cgi-bin/
    
        AllowOverride None
        Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
        Order allow,deny
        Allow from all
    
    
    ErrorLog /home/vps-admin.eu/logs/error.log
    
    # Possible values include: debug, info, notice, warn, error, crit,
    # alert, emerg.
    LogLevel warn
    
    CustomLog /home/vps-admin.eu/logs/access.log combined

10. Zapisujemy plik i zamykamy edytor wciskając kombinacje klawiszy CTRL+X, następnie klikając Y i zatwierdzając Enterem.

11. Włączamy vhosta i przeładowujemy konfiguracje Apache.

a2ensite vps-admin.eu
/etc/init.d/apache2 reload

Vhost będący jednocześnie hostname

Jeśli któryś z dodanych przez nas hostów wirtualnych jest również nazwą hosta (hostname) wybraną przez nas podczas rejestracji serwera VPS, ten vhost niestety nie zadziała. Dzieje się tak dlatego że domyślny vhost, którego „pliki” znajdują się w /var/www, jest przypisany do naszego hostname oraz dowolnej innej domeny lub adresu IP. Można to sprawdzić wpisując w konsoli:

root@e00:~# apachectl -t -D DUMP_VHOSTS
VirtualHost configuration:
wildcard NameVirtualHosts and _default_ servers:
*:80                   is a NameVirtualHost
         default server e00.eu (/etc/apache2/sites-enabled/000-default:1)
         port 80 namevhost e00.eu (/etc/apache2/sites-enabled/000-default:1)
         port 80 namevhost vps-admin.eu (/etc/apache2/sites-enabled/vps-admin.eu:1)
Syntax OK

Jak widać, domyślna strona WWW zwracana dla żądań HTTP niezawierających pola Host oraz vhost naszego hostname, są skonfigurowane w pliku 000-default. Ponieważ plik 000-default przetwarzany jest jako pierwszy, nie możliwe jest późniejsze dodanie vhosta dla nazwy takiej jak hostname serwera (u mnie – e00.eu). Aby umożliwić dodanie takiego vhosta, będziemy musieli nadać temu domyślnemu jakąś inną nazwę (np. "default").

Uwaga: Po wykonaniu czynności z poniższej listy, zniknie możliwość logowania się do panelu phpMyAdmin przez hostname i panel będzie dostępny jedynie przez adres IP serwera.

1. Za pomocą nano, edytujemy plik /etc/apache2/sites-available/default.

nano /etc/apache2/sites-available/default

2. Zaraz pod linijką:

ServerAdmin webmaster@localhost

Dopisujemy:

ServerName "default"

3. Zapisujemy plik i zamykamy edytor wciskając kombinacje klawiszy CTRL+X, następnie klikając Y i zatwierdzając Enterem.

4. Przeładowujemy konfigurację Apache:

/etc/init.d/apache2 reload

Teraz polecenie apachectl -t -D DUMP_VHOSTS powinno zwracać podobny wynik:

root@e00:~# apachectl -t -D DUMP_VHOSTS
VirtualHost configuration:
wildcard NameVirtualHosts and _default_ servers:
*:80                   is a NameVirtualHost
         default server default (/etc/apache2/sites-enabled/000-default:1)
         port 80 namevhost default (/etc/apache2/sites-enabled/000-default:1)
         port 80 namevhost vps-admin.eu (/etc/apache2/sites-enabled/vps-admin.eu:1)
Syntax OK

Autor: Aleksander Kurczyk


Wszystkie części serii: