Virtualhost par défaut : éternel problème

WRInaute discret
Bonsoir,

j'ai un serveur configuré avec des virtualhost, tout marche très bien. Les configurations sont de ce type :

Code:
<VirtualHost *:80>
        DocumentRoot /var/www/domaine1
        CustomLog /var/log/apache2/domaine1.access.log combined
        ServerName domaine1
</VirtualHost>
J'utilise un fichier par site dans sites-available et je les active avec a2ensite, tout comme il faut.
Les problèmes arrivent quand j'essaie de mettre un virtualhost par défaut (par exemple pour prendre en charge une connexion par l'ip du serveur). Je rajoute alors un fichier "mydefault" qui contient par exemple:

Code:
<VirtualHost _default_:80>
        DocumentRoot /var/www/domaine2
        CustomLog /var/log/apache2/domaine2.access.log combined
</VirtualHost>
Je l'active et malheur, tous les domaines sont redirigés vers domaine2. En gros, le virtualhost par défaut prend le pas sur tous les autres. Comment faire pour empêcher ça ? Ça n'est pourtant pas le comportement normal d'apache d'après ce que j'ai compris dans la doc... Savez-vous d'où peut venir le problème ?
 
WRInaute discret
Bon... je vois que je n'ai pas trop de succès... :? Est-ce que quelqu'un pourrait alors juste me dire si c'est normal ou non ? Juste pour que je sache si je doit continuer à chercher mon erreur.

Sinon, j'ai une question subsidiaire, comment vous gérez les connections sur l'ip de votre serveur ? Redirection ? Domaine par défaut (mais alors il y a duplicate content) ?
 
Nouveau WRInaute
en ce qui me concerne sur apache2 debian6 j'utilise le fichier /etc/apache2/sites-available/default comme ca:

<VirtualHost *:80>
ServerAdmin webmaster@localhost
<Directory />
Deny from all
</Directory>
</VirtualHost>
 
WRInaute impliqué
Code:
<VirtualHost _default_:80>

Pourquoi préciser l'IP ?

Préciser l'IP est utile seulement si ton serveur possède plusieurs adresse IP ET que tu souhaites n'utiliser qu'une adresse IP spécifique.
Si dans ton cas, tu n'as pas besoin du port 80 sur les autres IP (si tu en as plusieurs), met simplement une étoile comme sur les autres configuration des VHOST.
 
WRInaute passionné
Il te manque la directive :
ServerName
(et ServerAlias)
En cas de "conflit" (pas de ServerName de défini par exemple) la priorité se fait par ordre alphabénumérique.

@Blount: Préciser l'IP est une bonne conduite. Comme ça si tu as 2 IPs sur ton dédié, tu peux mettre un lighttpd sur un port 80, apache sur l'autre ;)

Edit, je n'avais pas vu que tu avais bien mis ton ServerName, tente de le mettre en "haut".
Sinon tu dois avoir une directive qui overlaps l'autre.
 
WRInaute discret
Ok, c'est pas encore très clair mais je commence à comprendre certaines choses. J'ai bien relu la donc Apache.

Le _default_ ne sert effectivement à rien dans mon cas puisqu'il est censé donner une configuration par défaut si l'ip du serveur n'est pas trouvée dans le virtualhost. Or j'ai des « * » partout donc ça sert à rien.

Par contre d'après les expériences que je viens de faire, le fait de mettre un virtualhost par défaut sans ServerName est une hérésie car apache le comprend comme n'importe quel ServerName. Ainsi en fonction de la position alphabétique des virtualHost par rapport au virtualHost par défault, il seront fonctionnels ou non. (j'ai vu cette solution sur de nombreux sites pourtant)
J'ai alors essayé en le mettant à la fin des déclarations avec un nom qui commence par « z ». Ça fonctionne bien sauf pour les accès sans host (directement par l'ip) qui sont eux dirigés sur le premier virtualHost.

Donc la solution c'est de mettre le virtualHost par défaut en premier avec un serveurName bidon. Pour ne passer devant aucun autre virtualHost tout en récupérant tous les domaines non déclarés et les ip.
 
WRInaute accro
moi je les ai mis en 1°, sans servername mais défini pour chaque ip et je renvoie ces accès directs sur un répertoire d'accès interdit, car aucun accès n'est sensé être effectué sur l'ip
 
WRInaute impliqué
Dans le ServerName, tu peux très bien mettre un IP.
Les gens arrivant directement sur cette IP seront attrapés par le vhost par défaut.
 
WRInaute passionné
Ici j'affiche une bête 404 pour la requête directe sur l'IP, afin qu'aucun site ne soit servi par défaut.
Ca donne ceci.

Un hôte virtuel par adresse IP du serveur :
/etc/apache2/sites-enabled/0-default_$IP
Code:
NameVirtualHost $IP:80
<VirtualHost $IP:80>
  ServerName $IP
  DocumentRoot /home/www/error
</VirtualHost>

Pour les hôtes utiles :
Code:
<VirtualHost $IP:80>
  ServerName $DOMAINE
  DocumentRoot /home/www/$DOMAINE
</VirtualHost>
 
WRInaute accro
moi j'ai préféré mettre plutôt un 401, ce qui correspond mieux à ma volonté de ne pas avoir d'accès par ce biais
 
WRInaute passionné
fred2541 a dit:
en ce qui me concerne sur apache2 debian6 j'utilise le fichier /etc/apache2/sites-available/default comme ca:

<VirtualHost *:80>
ServerAdmin webmaster@localhost
<Directory />
Deny from all
</Directory>
</VirtualHost>

J'ai essayé cela mais ça ne marche pas sur mon serveur debian 6 et ispconfig 3 :(

J'ai essayé le code ci-dessous dans mon fichier /etc/apache2/sites-available/default mais ça ne marche pa non plus :

<VirtualHost *:80>
ServerAdmin webmaster@localhost
ServerName mon-site.com
ServerAlias http://www.mon-site.com

DocumentRoot /var/www/clients/client0/web1/web/
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
<Directory /var/www/clients/client0/web1/web/>
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
allow from all
</Directory>

ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
<Directory "/usr/lib/cgi-bin">
AllowOverride None
Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
Order allow,deny
Allow from all
</Directory>

ErrorLog /var/log/apache2/error.log

# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
LogLevel warn

CustomLog /var/log/apache2/access.log combined

Alias /doc/ "/usr/share/doc/"
<Directory "/usr/share/doc/">
Options Indexes MultiViews FollowSymLinks
AllowOverride None
Order deny,allow
Deny from all
Allow from 127.0.0.0/255.0.0.0 ::1/128
</Directory>

</VirtualHost>

Qu'est qu'il faut mettre comme code dans /etc/apache2/sites-available/default pour que lorsque je rentre l'adresse IP de mon serveur dans mon browser ça renvoie vers une url (un de mes sites) ?
 
Discussions similaires
Haut