[Apache2] Configurer 200 sous domaines en virtualhost

Bonjour,

Pour un site internet j’aimerai pouvoir configurer une multitude de sous-domaines en virtualhost.
Environ 200 à 300 dans un premier temps, je possède les noms des répertoires et sous-domaines à créer dans une base MYSQL.

Est-ce réalisable facilement ? Sachant que je tourne sur un petit serveur dédié.

J’ai peut-être trouvé une première piste, mais un peu compliqué :
http://httpd.apache.org/docs/2.4/fr/vhosts/mass.html

Merci d’avance pour votre aide
Nicolas

[quote=“nicowizz”]Bonjour,

Pour un site internet j’aimerai pouvoir configurer une multitude de sous-domaines en virtualhost.
Environ 200 à 300 dans un premier temps, je possède les noms des répertoires et sous-domaines à créer dans une base MYSQL.

Est-ce réalisable facilement ? Sachant que je tourne sur un petit serveur dédié.

J’ai peut-être trouvé une première piste, mais un peu compliqué :
http://httpd.apache.org/docs/2.4/fr/vhosts/mass.html

Merci d’avance pour votre aide
Nicolas[/quote]

Ce sont bien 200 ou plus sites différents ? sinon tu les place en alias.

En fait c’est le même site, c’est juste pour le référencement que je souhaite procéder ainsi.
Mais si j’ai 100 ou 200 lignes comme ci-dessous, ce n’est pas un problème ?

      <VirtualHost *:80>
      ServerName paris.domain.fr
      DocumentRoot /var/www/domain/paris

      <VirtualHost *:80>
      ServerName marseille.domain.fr
      DocumentRoot /var/www/domain/marseille

En plus je viens de réfléchir, je vais juste indiquer DocumentRoot /var/www/domain/
à chaque ville, je vais me débrouiller en php pour récupérer le sous-domaine de l’URL,
et afficher ce qui est propre à la ville.

merci

Avec un script c’est faisable.
Tu recherches dans la base de données le domaine et le répertoire ensuite le script te génère le fichier du vhost .
Tu peux ensuite le faire tourner régulièrement, pour en ajouter si besoin est.

C’est faisable en Bash, en Php, et en Perl, et san doute avec d’autres langages …

merci, à priori je peux le faire avec un fichier .htaccess, je ne sais pas quelle solution privilégier du coup.

http://www.avanim-prod.com/blog/symfony/gerer-ses-sous-domaines-avec-htaccess-489

Salut,

Est-ce que les fichiers dans /var/www/domain/marseille et /var/www/domain/paris sont les mêmes ? OU pourraient être les mêmes si tu géres le contenu des fichiers via base de données ?

Donc en gros, est-ce tu pourrais avoir :
/var/www/domain/ville (un seul répertoire) en ayant “ville” géré dynamiquement et donc son contenu “modifié” dynamiquement ?

Je ne sais pas si je suis très clair … donc je vais te présenter un de mes logiciels et te dire comment je fonctionne, ca te donnera sûrement des idées.

Je propose un logiciel que je donne gratuitement a mes utilisateurs. Ils n’ont pas accès au code source, et c’est le même code source pour tous les utilisateurs. Les utilisateurs n’ont pas de répertoire. Le logiciel n’est stocké que dans UN SEUL répertoire. (facilités lors de mise à jour…)
Seulement, le contenu de ce logiciel est propre à chaque utilisateur. Donc chaque utilisateur à ses propres couleurs, etc… (et donc géré dynamiquement dans la base de données)…
Chaque utilisateur à un LOGIN, ce qui permet de différencier le contenu du logiciel pour chaque utilisateur dans la base de données.
Pour se connecter à leur logiciel, mes utilisateurs pourraient utiliser l’adresse logiciel.monsite.tld/index.php?login=LOGIN . (racine du logiciel : /var/www/monsite/logiciel/) Le contenu du logiciel va changer selon le LOGIN.

Pour avoir une adresse plus propre et plus facile à retenir, je leur permet d’utiliser LOGIN.monsite.tld ce qui va les renvoyer vers leur propre logiciel. (la racine du logiciel étant toujours /var/www/monsite/logiciel/)

Pour se faire, je créer simplement un virtualhost, UN SEUL.
Ce virtualhost (sans tous les détails on s’en tape) aura comme ServerAlias : *.monsite.tld et pointera sur /var/www/monsite/logiciel/)

Ca n’arrange pas tout. Car il faut maintenant que le logiciel reconnaisse le LOGIN pour afficher le bon contenu pour chaque utilisateur… Pour cela, j’ai un petit script tout bête dans mon “logiciel”, il fait ce qui suit (pseudo code) :

Il demande si j’utilise un sous domaine autre que “logiciel”.
Si oui, on demande dans la base de données si ce sous domaine correspond à un LOGIN existant.
Si oui, on affiche le contenu propre à l’utilisateur.
Si non, on affiche un message d’erreur
Si non, vu que sous domaine “logiciel” est utilisé c’est que l’adresse logiciel.monsite.tld/index.php?login=LOGIN est utilisée. Dans ce cas même procédé. On demande si LOGIN existe.

J’ai tapé mon message un peu vite donc désolé si j’ai fait des erreurs dans mon explication.

Faut juste savoir si tu peux gérer ton histoire de ville “dynamiquement”, si tu le peux, ca sera ultra simple d’automatiser ca !

(j’aurais pu pour ma part avoir un répertoire pour chaque utilisateur, et même une base de données pour chaque utilisateur… Mais lors d’une mise à jour, et lors de la gestion des adresses, ca aurait été une galère incroyable … enfin, en fait j’aurais jamais mis à disposition le logiciel sans avoir eu la possibilité de faire ca, trop compliqué à gérer…)

Bonsoir,

Je vous remercie tous pour vos réponses.

Balian, effectivement votre méthode avec un seul ServerAlias * est très astucieuse et permet de conserver un fichier de configuration léger. Surtout que je vais fonctionner comme vous, avec un index.php?ville=paris certainement en URL rewriting mais le principe sera la même, et le sous domaine entré peut-être récupérer en php de mémoire.

Par contre je n’ai pas le temps de tester sur ma config de tests, mais je souhaite que le sous domaine entré soit toujours affiché dans la barre d’url, est-ce que cela sera le cas ?

Merci beaucoup

[quote=“nicowizz”]Bonsoir,

Je vous remercie tous pour vos réponses.

Balian, effectivement votre méthode avec un seul ServerAlias * est très astucieuse et permet de conserver un fichier de configuration léger. Surtout que je vais fonctionner comme vous, avec un index.php?ville=paris certainement en URL rewriting mais le principe sera la même, et le sous domaine entré peut-être récupérer en php de mémoire.

Par contre je n’ai pas le temps de tester sur ma config de tests, mais je souhaite que le sous domaine entré soit toujours affiché dans la barre d’url, est-ce que cela sera le cas ?

Merci beaucoup[/quote]
Bonjour,

Le sous domaine sera toujours utilisé et affiché. Ca fonctionne comme un sous domaine car c’est un sous domaine :wink:
Les utilisateurs créaient des sous domaines lorsqu’ils en ont besoin, et très souvent, les sous domaines se comptent sur les doigts d’une main, voire peut être deux mains. Rare sont les sites ayant plus de 10 sous domaines. (et ceux en ayant plus, soient ils continuent de le faire manuellement s’ils en ont peu, soient ils créaient des scripts pour le faire).

La plupart de ces personnes, dans leurs sous domaines, ils ont un contenu différent, donc un répertoire différent, etc… Alors que pour toi, moi, le répertoire sera le même, le contenu le même.

De ce fait la technique que je t’ai présenté permet de “créer”, ou plutôt de dire “tous les sous domaines existent”. C’est comme un catch all d’une adresse email. Dans ton cas, (et le mien) tous ces sous domaines redirigent vers un même sous répertoire, ce qui te permet ensuite de faire un contrôle si le sous domaine demandé existe bien ou non. (ce contrôle se fera sur tes pages, par exemple dans ta page index.php principal de ta ville)

Il faut aussi se dire que cela n’empêche pas d’avoir d’autres sous domaines “statiques”… par exemple tonsite.tld redirigera vers ton site principal (tout comme l’absence de sous domaine)… forum.tonsite.tld vers ton forum… mail.tonsite.tld sera utilisé pour ton webmail, etc… etc… Pour cela, il faudra simplement avoir d’autres virtualhost qui seront les mêmes que pour celui de ton *… (il faudra juste indiquer le nom du sous domaine à la place de *, et modifier la racine pour ton répertoire)

Cette technique, est vraiment très efficace quand on veut faire ce genre de manipulation. Ca facilite grandement la vie, et c’est ultra simple à mettre en place. (car très logique dans sa manière d’être mise en place)

Ca fonctionne du moment que tes liens sur ton site ne soient pas des adresses absolues qui contredisent ce que tu souhaites faire. Mais de toute façon personne n’utilise d’adresses absolues pour des liens internes au site…

Pour tes essais, tu peux faire quelque chose de simple …
Tu créer un virtualhost comme si tu crées un sous domaine, sauf que tu mets ton * a la place du nom du sous domaine.
Ensuite dans le répertoire indiqué dans le virtualhost, mets une page index.php, avec une fonction php permettant de récupérer le nom du sous domaine, tu l’affiches, et le tour est joué. Ca te prendra maximum 10 minutes :stuck_out_tongue: et tu verras, c’est magnifique :smiley:
Et l’exploitation en production ne sera pas tellement différente. (juste un petit contrôle rapide après récupération du sous domaine sur ta page php… qui se fait en quelques lignes de code php… quelques conditionnelles et requête SQL très basiques que j’ai présenté en pseudo code dans mon message précédent)

:007 Merci infiniment Balian, j’ai testé ça fonctionne très bien !
Du coup je vais pouvoir l’appliquer à ma base MYSQL de 36000 villes sans problème.

Merci encore ! Bonne continuation à toi.
Nicolas