Wie erstelle ich Subdomains auf einem namensbasierten virtuellen Host?

27

Ich habe namensbasiertes Hosting, nennen wir es my.address.com. Mein Freund hat die 'normale' Adresse address.comund hat mir eine virtuelle Maschine gegeben, auf die ich über SSH zugreifen kann.

Er hat auch etwas Magie mit Ports gemacht und jetzt, nach der Installation von Apache, konnte ich /var/wwwdurch zugreifen my.address.com.

Die Frage ist also, wie kann ich eine Subdomain erstellen test.my.address.com?

Es sollte etwas Magie mit Apaches Listen-Direktive geben , aber ich kann es nicht herausfinden. Ich weiß auch, wie man mit Apache lokal verfügbare Sites erstellt, aber es ist nicht dasselbe.

Scythargon
quelle
Sie brauchen nicht Listen, schauen Sie sich die virtuellen Hosts von Apache an
Der Hochstapler
Die Hauptfrage bleibt: Was ist in der ServerName-Direktive zu schreiben?
Scythargon

Antworten:

33

Um Subdomains erstellen zu können, müssen Sie einige Dinge beachten:

DNS

Damit andere Personen zugreifen können test.my.address.com, müssen sie in der Lage sein, diesen Namen in die IP-Adresse Ihrer virtuellen Maschine aufzulösen. Wie geht das?

Höchstwahrscheinlich hat Ihr Freund bereits einen A-Eintrag in der address.comZone erstellt, der myauf die IP-Adresse Ihrer VM verweist .

So weit, ist es gut. Aber was ist mit test.my? Möglicherweise ist noch kein Eintrag vorhanden.

Ihr Freund kann *.myder Zone auch einfach hinzufügen (und auf dieselbe IP-Adresse verweisen). Dann werden alle Anfragen something.my.address.coman Ihre VM gesendet. Groß!

Apache Virtual Hosts

Sobald Ihre VM erreicht ist, muss Apache wissen, wie mit der Anfrage umgegangen wird. Hier verwenden wir die Virtual Hosts- Funktion des Apache HTTP-Servers.

Normalerweise laufe ich unter Debian, daher erkläre ich dies anhand einer Beispielkonfiguration in /etc/apache2/sites-available. Lassen Sie uns dort eine Datei aufrufen test.my.address.comund mit Informationen füllen.

<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>

Die Schlüsseleinstellung in dieser Datei ist die ServerNameDirektive . Dies teilt Apache mit, unter welchem ​​Namen dieser Server verfügbar sein soll. Zusätzliche Namen können mit der ServerAlias-Direktive angegeben werden .

Falls Sie auch Debian verwenden, vergessen sudo a2ensite test.my.address.comSie nicht, nachdem Sie die Datei und erstellt haben sudo invoke-rc.d apache2 restart.

Der Hochstapler
quelle
Vielen Dank! :) Ich habe meinen Teil gemacht und einem Freund eine E-Mail über seinen Teil geschrieben.
Nochmals vielen
@scythargon: Es ist mir ein Vergnügen. Wir sind hier um zu helfen :)
Der Hochstapler
Mein Freund hat mir zwar nicht geantwortet, können Sie das bitte? Worüber ich nachgedacht habe, wie es funktioniert: http-request for test.my.address.comgeht an my.address.comund dann kümmert sich mein Apache-Server auf VM darum . Aber Sie sagten, dass der DNS-Server von address.com test.myvorher Bescheid wissen sollte und unabhängig davon my, warum.
Scythargon
@scythargon: Damit eine HTTP-Anfrage Ihren Server erreicht, muss jeder Client zuerst herausfinden, an welchen Server die Anfrage gesendet werden muss. Der Hostname muss also gültig sein. Andernfalls wird ihnen nur mitgeteilt, dass der Name nicht existiert.
Der Hochstapler