Apache 2.2 wiele wirtualnych domen jednym konfigiem

Ostatnio postanowiłem poszukać rozwiązania, które pomogłoby mi zautomatyzować proces tworzenia nowego projektu na moim serwerze developerskim. Do tej pory tworzyłem nowy <VirtualHost> z nazwą domeny. W stefie miałem wpis z gwiazdką – więc z tym chociaż nie miałem problemu.

Szperając trochę w sieci natknąłem się na VirtualDocumentRoot, dzięki tej dyrektywie można stworzyć jeden <VirtualHost>, który obsłuży wszystkie projekty w danej domenie.

Załóżmy, że mamy domene example.com i chcemy zrobić, aby Apache obsługiwał wszystkie domeny *.projekty.example.com oraz sam wybierał katalog w którym znajduje się strona.

Na początek musimy w strefie dodać wpis z gwiazdką.

*.projekty         IN A [ip serwera z apache]

Teraz konfigurujemy Apacha:

<VirtualHost *:80>
    ServerName projekty.example.com
    ServerAlias *.projekty.example.com
    VirtualDocumentRoot /home/projects/%-4+/public_html
</VirtualHost>

Dyrektywa VirtualDocumentRoot pozwala nam skonfigurowanie takiego katalogu strony, który będzie zależny od domeny. Stosując %, możemy wybrać, która część domeny ma być brana pod uwagę. Zastosowane tutaj %-4+ powoduje, że wybierane są wszystkie części subdomeny .dev.example.com.

Przykład:

Przy takiej konfiguracji, user wchodzący na stronę testowa.projekty.example.com dostanie stronę z katalogu /home/projects/testowa/public_html

W takiej konfiguracji możemy jeszcze ustawić stronę dla domeny projekty.example.com, musimy umieścić ją w katalog /home/projects/_/public_html (brak domeny zastępowany jest podkreśleniem).

W ten sposób mamy dość zautomatyzowany proces tworzenia domen. Wystarczy założyć katalog i domena od razu działa.

Moim dodatkowym założeniem było jeszcze, że domyślnie nie chcę, aby użytkownicy „z zewnątrz” widzieli nowy projekt strony. User mógłby się domyślić jak wyglądać będzie nowa nazwa strony. W tym celu dodałem następujący kod do konfiguracji Apache:

<Directory /home/projects>
    AllowOverride All
    Order Deny,Allow
    Allow from 192.168.168.0/24
    Deny from All
</Directory>

Dyrektywa AllowOverride All pozwoli mi na nadpisywanie wszystkich możliwych parametrów przez plik .htaccess. Zatem jeśli chcę, aby mój projekt był dostępny z Internetu tworze w /home/projects/[nazwa_projektu] plik .htaccess z treścią:

Allow from Any

Pozostała jeszcze jedna rzecz – chciałem, aby pomimo, że projekt dostępny jest z Internetu to jednak nie był indeksowany przez wyszukiwarki. Stworzyłem plik /etc/apache2/robots.txt z treścią:

User-agent: *
Disallow: /

A następnie dodałem do konfiguracji Apache:

Alias /robots.txt /etc/apache2/robots.txt

Dzięki czemu w każdej mojej domenie istnieje plik robots.txt z parametrami dla wyszukiwarek zabraniającymi indeksacji jakichkolwiek plików – najpopularniejsze wyszukiwarki honorują ten plik.

Dodaj komentarz