Comment créer des sous-domaines sur un hôte virtuel basé sur un nom?

27

J'ai un hébergement basé sur un nom, appelons-le my.address.com. Mon ami a l'adresse «simple» address.comet m'a donné une machine virtuelle à laquelle je peux accéder via SSH.

Il a également fait un peu de magie avec des ports et maintenant, après l' installation d' Apache, je pouvais accéder à /var/wwwtravers my.address.com.

Donc, la question est, comment puis-je créer un sous-domaine test.my.address.com?

Il devrait y avoir de la magie avec la directive d'écoute d' Apache , mais je ne peux pas le comprendre. De plus, je sais comment créer des sites disponibles localement avec Apache, mais ce n'est pas la même chose.

scythargon
la source
Vous n'en aurez pas besoin Listen, regardez les hôtes virtuels Apaches: httpd.apache.org/docs/2.2/vhosts
Der Hochstapler
la question principale est restée - quoi écrire dans la directive ServerName?
scythargon

Réponses:

33

Pour pouvoir créer des sous-domaines, vous devrez vous assurer de plusieurs choses:

DNS

Pour que d'autres puissent atteindre test.my.address.com, ils doivent d'abord pouvoir résoudre ce nom en adresse IP de votre machine virtuelle. Comment cela peut-il être fait?

Ce que votre ami a probablement déjà fait, c'était de créer un enregistrement A dans la address.comzone, qui pointe myvers l'adresse IP de votre machine virtuelle.

Jusqu'ici tout va bien. Mais qu'en est-il test.my? Il ne contient peut-être pas encore d'entrée.

Votre ami peut également simplement ajouter *.myà la zone (et la pointer vers la même adresse IP). Ensuite, toutes les demandes something.my.address.comseront envoyées à votre machine virtuelle. Génial!

Hôtes virtuels Apache

Une fois votre machine virtuelle atteinte, Apache doit savoir comment gérer la demande. C'est là que nous utilisons la fonctionnalité Virtual Hosts du serveur HTTP Apache.

Je tourne généralement sur Debian, donc je vais l'expliquer avec un exemple de configuration dans /etc/apache2/sites-available. Faisons appeler un fichier test.my.address.comet remplissons-le avec des informations.

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

Le paramètre clé à l' intérieur de ce fichier est la ServerNamedirective . Cela indique à Apache sous quel nom ce serveur doit être disponible. Des noms supplémentaires peuvent être donnés avec la directive ServerAlias .

Si vous utilisez également Debian, n'oubliez pas de le faire sudo a2ensite test.my.address.comaprès avoir créé le fichier et sudo invoke-rc.d apache2 restart.

Der Hochstapler
la source
Merci beaucoup! :) J'ai fait ma part, et écrit un e-mail à un ami à propos de sa part. Merci encore :)
scythargon
@scythargon: Mon plaisir. Nous sommes là pour vous aider :)
Der Hochstapler
Alors que mon ami n'a pas répondu à ma question, pouvez-vous, s'il vous plaît? Ce que j'ai pensé de son fonctionnement: http-request for test.my.address.comva à my.address.compuis mon serveur Apache sur VM le gère. Mais vous avez dit que le serveur DNS à address.com devrait être au courant test.myavant tout cela et indépendamment des connaissances my, pourquoi?
scythargon
@scythargon: Pour que toute requête HTTP atteigne votre serveur, tout client doit d'abord déterminer à quel serveur la requête doit être envoyée. Le nom d'hôte doit donc être valide. Sinon, on leur dira simplement "ce nom n'existe pas".
Der Hochstapler