web-dev-qa-db-fra.com

Plusieurs sous-domaines Apache avec une seule adresse IP

Cela a probablement été demandé, mais je ne trouve pas de réponse claire, ou celles que j'ai trouvées ne fonctionnent pas.

J'ai un domaine mondomaine.com , résolu en IP; appelons-le 8.8.8.8. Les paramètres DNS pointent également deux sous-domaines vers cette adresse IP avec un enregistrement A. Ce sont dev.mydomain.com et staging.mydomain.com . Les deux ont un enregistrement A pointant vers 8.8.8.8.

Sur le serveur (8.8.8.8), j'ai deux fichiers d'hôtes virtuels. Ce sont les suivants:

staging.mydomain.com.conf

<VirtualHost *:80>
    ServerName  staging.mydomain.com
    DocumentRoot /var/www/html/mydomain.com/staging/
</VirtualHost>

Et...

dev.mydomain.com.conf

<VirtualHost *:80>
    ServerName  dev.mydomain.com
    DocumentRoot /var/www/html/mydomain.com/dev/
</VirtualHost>

Le problème est:

Que je visite http://staging.mydomain.com ou http://dev.mydomain.com =, j'atterris toujours sur staging.mydomain.com (Apache sert ces fichiers).

J'ai redémarré Apache et même le serveur. Si je change l'ordre des fichiers .conf pour que dev soit le premier, je le vois toujours. Toutes les suggestions seraient ainsi appréciées. Merci!


mise à jour

Je me retrouve à nouveau à ce problème! Si vous savez que votre syntaxe est correcte, vous pourriez avoir un mauvais lien symbolique. Supprimez-le et recréez à nouveau, en redémarrant Apache entre les deux. Je viens de le faire et cela a résolu des heures de gratte-tête. Sur CentOS, vous pouvez vérifier vos vhosts disponibles avec httpd -S

mise à jour 2

J'ai également constaté que ce problème existait lorsque les fichiers journaux Apache pour l'hôte virtuel n'existaient pas ou n'étaient pas accessibles en écriture.

22
Jongosi

On dirait que vous devez ajouter directive NameVirtualHost à votre configuration.

NameVirtualHost         *:80

Dans certaines circonstances, Apache peut ne pas être en mesure de gérer *:80 VirtualHosts correctement. Dans ces cas, vous devez mapper VirtualHosts directement sur des adresses IP spécifiques.

NameVirtualHost         8.8.8.8:80

<VirtualHost 8.8.8.8:80>
    ServerName  staging.mydomain.com
    ServerAlias stage.mydomain.com
    DocumentRoot /var/www/html/mydomain.com/staging/
</VirtualHost>

<VirtualHost 8.8.8.8:80>
    ServerName  dev.mydomain.com
    ServerAlias development.mydomain.com
    DocumentRoot /var/www/html/mydomain.com/dev/
</VirtualHost>

Vous pouvez également exécuter apachectl -t -D DUMP_VHOSTS pour voir comment Apache analyse la configuration de VirtualHost.

Mise à jour: Comme mentionné dans les commentaires, vous pouvez généralement utiliser simplement NameVirtualHost *:80. Ainsi, la plupart du temps, vous pouvez configurer les hôtes virtuels comme suit.

NameVirtualHost         *:80

<VirtualHost *:80>
    ServerName  staging.mydomain.com
    ServerAlias stage.mydomain.com
    DocumentRoot /var/www/html/mydomain.com/staging/
</VirtualHost>

<VirtualHost *:80>
    ServerName  dev.mydomain.com
    ServerAlias development.mydomain.com
    DocumentRoot /var/www/html/mydomain.com/dev/
</VirtualHost>
28
Ketola