Jak tworzyć poddomeny na wirtualnym hostie opartym na nazwie?

26

Mam hosting oparty na nazwach, nazwijmy to my.address.com. Mój znajomy ma „zwykły” adres address.com i dał mi maszynę wirtualną, do której mogę uzyskać dostęp za pośrednictwem SSH.

Zrobił też trochę magii z portami i teraz, po zainstalowaniu Apache, mogłem uzyskać dostęp /var/www przez my.address.com.

Tak więc pytanie brzmi: jak mogę stworzyć subdomenę test.my.address.com?

Powinno być trochę magii Dyrektywa dotycząca słuchania Apache , ale nie mogę tego zrozumieć. Wiem też, jak tworzyć lokalnie dostępne witryny za pomocą Apache, ale to nie to samo.

scythargon
źródło
Nie potrzebujesz Listen, spójrz na wirtualne hosty Apache: httpd.apache.org/docs/2.2/vhosts
Der Hochstapler
główne pytanie pozostaje - co napisać w dyrektywie ServerName?
scythargon

Odpowiedzi:

32

Aby móc tworzyć poddomeny, musisz się upewnić, że masz kilka rzeczy:

DNS

Więc inni mogą dotrzeć test.my.address.com, najpierw muszą być w stanie rozpoznać tę nazwę na adres IP maszyny wirtualnej. Jak można to zrobić?

Najprawdopodobniej twój przyjaciel już to zrobił Nagranie w address.com strefa, która wskazuje my na adres IP swojej maszyny wirtualnej.

Jak na razie dobrze. Ale co z test.my? Może jeszcze nie mieć wpisu.

Twój przyjaciel może po prostu dodać *.my do strefy (i wskaż ten sam adres IP). Następnie wszystkie prośby do something.my.address.com zostanie wysłany do twojej maszyny wirtualnej. Świetny!

Wirtualne hosty Apache

Po osiągnięciu Twojej maszyny wirtualnej Apache musi wiedzieć, jak sobie z nią poradzić. Tutaj używamy Wirtualne hosty funkcja serwera HTTP Apache.

Zazwyczaj pracuję na Debianie, więc wyjaśnię to za pomocą przykładowej konfiguracji w /etc/apache2/sites-available. Nazwijmy plik test.my.address.com i wypełnij go informacjami.

<VirtualHost *:80>
        ServerName test.my.address.com
        ServerAdmin [email protected]

        DocumentRoot /var/www/test.my.address.com/
        <Directory />
                Options FollowSymLinks
                AllowOverride None
        </Directory>
        <Directory /var/www/test.my.address.com/>
                Options Indexes FollowSymLinks MultiViews
                AllowOverride All
                Order allow,deny
                allow from all
        </Directory>

        ErrorLog ${APACHE_LOG_DIR}/test.my.address.com.error.log

        # Possible values include: debug, info, notice, warn, error, crit,
        # alert, emerg.
        LogLevel warn

        CustomLog ${APACHE_LOG_DIR}/test.my.address.com.access.log combined
</VirtualHost>

The ustawienie klucza wewnątrz tego pliku jest ServerName dyrektywa . To mówi Apache, pod jaką nazwą to serwer powinien być dostępny. Dodatkowe nazwy można podać za pomocą Dyrektywa ServerAlias .

Jeśli korzystasz z Debiana, nie zapomnij sudo a2ensite test.my.address.com po utworzeniu pliku i sudo invoke-rc.d apache2 restart.

Der Hochstapler
źródło
Wielkie dzięki! :) Zrobiłem swoją część i napisałem do znajomego e-mail o jego roli. Dzięki raz jeszcze:)
scythargon
Również dziękuję za sprawdzenie mojego angielskiego :)
scythargon
@scythargon: Moja przyjemność. Jesteśmy tutaj, aby pomóc :)
Der Hochstapler
Chociaż mój przyjaciel nie odpowiedział na moje pytanie, czy możesz, proszę? Co pomyślałem o tym, jak to działa: żądanie http dla test.my.address.com idzie do my.address.com i wtedy mój serwer Apache na VM obsługuje to. Ale powiedziałeś, że serwer DNS na adres.com powinien wiedzieć test.my przed wszystkim tym i niezależnie od wiedzy o my, czemu?
scythargon
@scythargon: Aby każde żądanie HTTP dotarło do twojego serwera, każdy klient musi najpierw dowiedzieć się, do jakiego serwera należy wysłać żądanie. Więc nazwa hosta musi być ważna. W przeciwnym razie powiedziano im, że „ta nazwa nie istnieje”.
Der Hochstapler