Sous-domaines dynamiques (Bind, Apache et .htaccess)

WRInaute impliqué
Bonjour,

Je sais que le sujet a déjà été traité plusieurs fois... mais je n'ai pas réussi à trouver la solution qui me convient.

J'ai un serveur dédié (OVH) sur lequel j'héberge tous mes sites.
Pour l'un deux, je souhaite donc gérer les sous-domaines de manière automatique.
*http://bar.domaine.com -> *http://www.domaine.com/index.php?foo=bar

J'ai modifié le .htaccess à la racine de domaine.com:
Code:
RewriteEngine On
RewriteCond %{HTTP_HOST} !^www\.domaine.com
RewriteCond %{HTTP_HOST} !^sql\.domaine.com
RewriteCond %{HTTP_HOST} !^admin\.domaine.com
RewriteCond %{HTTP_HOST} ^([^.]+)\.domaine.com
RewriteRule ^(.*)$ /index.php?foo=%1

J'ai modifié la zone DNS:
Code:
...
imap            IN      A       213.251.181.112
sql             IN      A       213.251.181.112
mysql           IN      A       213.251.181.112
*		IN	A	213.251.181.112

Et mon httpd.conf:
Code:
...
<VirtualHost 213.251.181.112>
        DocumentRoot /home/domaine/www
        ServerName *.domaine.com
</VirtualHost>

<VirtualHost 213.251.181.112>
        ServerAdmin webmaster@domaine.com
        DocumentRoot /home/domaine/www
        User domaine
        Group users
        ServerName www.domaine.com
        ServerAlias domaine.com
        CustomLog logs/domaine-access_log combined
        ScriptAlias /cgi-bin/ /home/domaine/cgi-bin/
</VirtualHost>

Alors, mes sql.domaine.com etc... fonctionnent bien,
Mais tous les sous-domaines qui devraient être pris en compte par le wildcard... non.
En fait, ils pointent (à priori) bien sur mon serveur, mais à la racine du serveur.
Je ne sais pas comment les faire pointer sur mon domaine, pour que le .htaccess prenne le relais...
 
WRInaute accro
doic a dit:
J'ai un serveur dédié (OVH) sur lequel j'héberge tous mes sites.
Pour l'un deux, je souhaite donc gérer les sous-domaines de manière automatique.
*http://bar.domaine.com -> *http://www.domaine.com/index.php?foo=bar

Ce ne serait pas plus simple de vérifier la valeur de HTTP_HOST dans ton script?

doic a dit:
Et mon httpd.conf:
Code:
...
<VirtualHost 213.251.181.112>
        DocumentRoot /home/domaine/www
        ServerName *.domaine.com
</VirtualHost>

<VirtualHost 213.251.181.112>
        ServerAdmin webmaster@domaine.com
        DocumentRoot /home/domaine/www
        User domaine
        Group users
        ServerName www.domaine.com
        ServerAlias domaine.com
        CustomLog logs/domaine-access_log combined
        ScriptAlias /cgi-bin/ /home/domaine/cgi-bin/
</VirtualHost>

Je ne suis pas sûr que tu puisses utiliser "*.domaine.com" dans un ServerName. Mais si aucun ServerName ou ServerAlias ne correspond, c'est le premier VirtualHost (pour cette IP) qui sera utilisé, donc il faut bien que l'entrée correspondante soit la première. Je suppose évidemment que tu as déjà un "NameVirtualHost 213.251.181.112" dans ton httpd.conf...

Pour vérifier que c'est le bon VirtualHost qui est pris en compte, mets-lui (par exemple) un DocumentRoot différent pour voir ce que ça donne. Regarde aussi la valeur du virtual host indiqué dans le log...

Jacques.
 
WRInaute impliqué
jcaron a dit:
Ce ne serait pas plus simple de vérifier la valeur de HTTP_HOST dans ton script?
Pour le moment, je n'accède pas au script, mes *.domaine.com pointent directement à la racine de mon serveur. (Ou bien je ne comprends pas ce que tu me dis)...

jcaron a dit:
Je ne suis pas sûr que tu puisses utiliser "*.domaine.com" dans un ServerName. Mais si aucun ServerName ou ServerAlias ne correspond, c'est le premier VirtualHost (pour cette IP) qui sera utilisé, donc il faut bien que l'entrée correspondante soit la première. Je suppose évidemment que tu as déjà un "NameVirtualHost 213.251.181.112" dans ton httpd.conf...

Pour vérifier que c'est le bon VirtualHost qui est pris en compte, mets-lui (par exemple) un DocumentRoot différent pour voir ce que ça donne. Regarde aussi la valeur du virtual host indiqué dans le log...

Jacques.
Effectivement, il faudrait peut-être avoir un ServerName *.domaine.com ?
Est-ce que tu peux me suggérer un bon virtualhost à configurer ?
(J'ai bien un "NameVirtualHost 213.251.181.112" dans mon httpd.conf)
 
WRInaute accro
doic a dit:
jcaron a dit:
Ce ne serait pas plus simple de vérifier la valeur de HTTP_HOST dans ton script?
Pour le moment, je n'accède pas au script, mes *.domaine.com pointent directement à la racine de mon serveur. (Ou bien je ne comprends pas ce que tu me dis)...

Je dis que plutôt que faire des rewrite, tu fais tout pointer sur un script unique (ou en tous cas une arbo unique), et au début du/des script(s) tu prends la valeur de HTTP_HOST et tu en extrais ce qui t'intéresse, plutôt que de récupérer ça dans une variable.

doic a dit:
Effectivement, il faudrait peut-être avoir un ServerName *.domaine.com ?

Tu en as un, mais je ne suis pas sûr ce ça marche, et en tous cas ce n'est pas nécessaire: il suffit de mettre ton VirtualHost en premier pour qu'il récupère toutes les requêtes qui ne correspondent à aucun autre VirtualHost (via ServerName ou ServerAlias).

Jacques.
 
WRInaute impliqué
jcaron a dit:
Je dis que plutôt que faire des rewrite, tu fais tout pointer sur un script unique (ou en tous cas une arbo unique), et au début du/des script(s) tu prends la valeur de HTTP_HOST et tu en extrais ce qui t'intéresse, plutôt que de récupérer ça dans une variable.
OK, j'ai compris, c'est vrai que ça parait plus solide, et moins gourmand en ressources.

jcaron a dit:
Tu en as un, mais je ne suis pas sûr ce ça marche, et en tous cas ce n'est pas nécessaire: il suffit de mettre ton VirtualHost en premier pour qu'il récupère toutes les requêtes qui ne correspondent à aucun autre VirtualHost (via ServerName ou ServerAlias).
Hmmm... Donc j'utilise ServerName ou ServerAlias ?
Et je mets tout dans le même <VirtualHost> ?
Pourquoi le mettre en premier ? Il ne faudrait pas le mettre en dernier ? Pour qu'il soit pris en compte comme "redirection par défaut" si le sous-domaine ne correspond pas à 'www' ou 'sql' ?
 
WRInaute accro
doic a dit:
jcaron a dit:
Tu en as un, mais je ne suis pas sûr ce ça marche, et en tous cas ce n'est pas nécessaire: il suffit de mettre ton VirtualHost en premier pour qu'il récupère toutes les requêtes qui ne correspondent à aucun autre VirtualHost (via ServerName ou ServerAlias).
Hmmm... Donc j'utilise ServerName ou ServerAlias ?
Et je mets tout dans le même <VirtualHost> ?
Pourquoi le mettre en premier ? Il ne faudrait pas le mettre en dernier ? Pour qu'il soit pris en compte comme "redirection par défaut" si le sous-domaine ne correspond pas à 'www' ou 'sql' ?

Quand Apache ne trouve aucun VirtualHost qui corresponde à une requête, il utilise le premier (c'est dans la doc).

Donc:

NameVirtualHost adresse_ip

<VirtualHost adresse_ip>
ServerName default.domaine.com
DocumentRoot path_pour_wildcard
</VirtualHost>

<VirtualHost adresse_ip>
ServerName www.domaine.com
ServerAlias domaine.com
DocumentRoot path_pour_www
</VirtualHost>

<VirtualHost adresse_ip>
ServerName autre.domaine.com
DocumentRoot path_pour_autre
</VirtualHost>

Etc.

Bref: tu commences par celui par défaut (le ServerName importe peu, mais c'est lui que tu verras dans les logs, les messages d'erreur, et les redirects "locaux"), puis tu mets tous les "spécifiques".

Jacques.
 
WRInaute impliqué
Je ne comprends pas, à quelle fréquence je peux faire mes essais ?
Je viens d'enlever tout ce qui concerne les sous-domaines dans mon httpd.conf, et rien ne change...

J'en déduis que rien ne marche après ma zone DNS...

J'ai lu sur un forum qu'il fallait mettre le wilcard dans le DNS et dans la conf d'apache, mais toi tu me dis que le wildcard ne marche pas dans apache ??

Aucun de mes tests ne débouche sur le DocumentRoot que je veux:
<VirtualHost 213.251.181.112>
ServerName *.domaine.com
DocumentRoot /home/domaine/www/domaines
</VirtualHost>

Rien à faire, avec ce bloc ou sans ce bloc, tout aboutit à la racine du serveur... même pas à l'accueil de mon domaine !!
 
WRInaute accro
doic a dit:
Je ne comprends pas, à quelle fréquence je peux faire mes essais ?
Je viens d'enlever tout ce qui concerne les sous-domaines dans mon httpd.conf, et rien ne change...

Je suppose que tu relances bien ton serveur http?

doic a dit:
J'ai lu sur un forum qu'il fallait mettre le wilcard dans le DNS et dans la conf d'apache, mais toi tu me dis que le wildcard ne marche pas dans apache ??

Non, je dis que le virtualhost "wildcard" c'est le premier, peu importe le nom que tu lui mets.

doic a dit:
Aucun de mes tests ne débouche sur le DocumentRoot que je veux:
<VirtualHost 213.251.181.112>
ServerName *.domaine.com
DocumentRoot /home/domaine/www/domaines
</VirtualHost>

Rien à faire, avec ce bloc ou sans ce bloc, tout aboutit à la racine du serveur... même pas à l'accueil de mon domaine !!

On est bien d'accord que ce virtualhost est le premier de la liste?

Jacques.
 
WRInaute impliqué
jcaron a dit:
Je suppose que tu relances bien ton serveur http?

Oui, je relance le serveur à chaque fois...

jcaron a dit:
On est bien d'accord que ce virtualhost est le premier de la liste?

Jacques.
Ce n'est pas le premier de la liste (j'ai plusieurs domaines) mais c'est le premier concernant le domaine en question..

Je vais essayer en le mettant tout en haut... pour voir.
 
WRInaute accro
doic a dit:
Ce n'est pas le premier de la liste (j'ai plusieurs domaines) mais c'est le premier concernant le domaine en question..

Je vais essayer en le mettant tout en haut... pour voir.

Pour qu'il soit considéré comme le virtual host par défaut, il doit être le premier pour l'adresse IP associée.

Sinon en regardant un peu plus la doc d'Apache (mais ce n'est pas super explicite), je pense que tu peux mettre un *.domaine.com dans ServerAlias mais pas dans ServerName (ce dernier devrait être un "vrai" nom). A vérifier...

Jacques.
 
WRInaute impliqué
Bon, je l'ai mis en tout premier, et maintenant, j'ai une erreur 500 si j'essaie d'accéder aux sous-domaines dynamiques.
Dès que je le redescends, ça me rebalance sur la racine du serveur...
Je dois donc avoir un problème dans mon bloc avec le wilcard ???

OK, je viens de voir la réponse ci-dessus...
Donc dans mon bloc, je mets seulement le ServerAlias ou un ServerAlias ET un ServerName ? Et dans ce cernier cas, je mets quoi dans le ServerName ? www.domaine.com ?
 
WRInaute accro
doic a dit:
Bon, je l'ai mis en tout premier, et maintenant, j'ai une erreur 500 si j'essaie d'accéder aux sous-domaines dynamiques.

C'est que tu as un autre problème ailleurs, mais tes logs t'en diront plus.

doic a dit:
Donc dans mon bloc, je mets seulement le ServerAlias ou un ServerAlias ET un ServerName ? Et dans ce cernier cas, je mets quoi dans le ServerName ? www.domaine.com ?
Tu mets un ServerName et un ServerAlias. Le ServerName sera utilisé pour les messages d'erreurs, les logs, et les redirections locales. Il est aussi utilisé pour "matcher" les requêtes sur ce virtual host, donc si tu utilises www.domaine.com alors les requêtes sur ce domaine iront sur ce virtual host, ce dont je pense que ce n'est pas ce que tu veux, utilise donc un autre domaine "non spécifique". wildcard.domaine.com fait très bien l'affaire par exemple.

Jacques.
 
WRInaute impliqué
:'(
Et je les trouve ou mes logs ?

Pour "wildcard.domaine.com", est-ce que je le mets comme ça dans le fichier de conf, ou je dois le déclarer aussi dans les DNS ?
 
WRInaute accro
doic a dit:
Et je les trouve ou mes logs ?

A l'endroit indiqué par ta configuration (directive ErrorLog).

doic a dit:
Pour "wildcard.domaine.com", est-ce que je le mets comme ça dans le fichier de conf, ou je dois le déclarer aussi dans les DNS ?

Pas nécessaire, il sera "récupéré" par le *.domaine.com...

Jacques.
 
WRInaute impliqué
Génial, tout fonctionne !
le problème venait certainement du fait que *.domaine.com était lié à domaine.com... il faut bien lui attribuer un servername à part entière... (je sais pas si j'ai tout compris, mais ça marche c'est le principal)

Par contre, en déclarant le wildcard en premier, ça plante:
mon www.domaine.com et sql.domaine.com pointaient sur le documentroot de mon *.domaine.com

J'ai donc déclaré le wildcard en dernier dans ma conf Apache, et là tout fonctionne :)

Merci infiniment Jacques...

Ca faisait tellement longtemps que je luttais !!
 
Discussions similaires
Haut