7 votes

Hôtes virtuels nommés par Apache avec des caractères génériques

Je veux mapper www.example.com vers un hôte virtuel spécifique et je veux que tous les autres sous-domaines de example.com aillent vers un autre hôte virtuel.

Pour ce faire, j'ai créé ces hôtes :

<VirtualHost *:80>
  ServerName www.example.com
</VirtualHost>

<VirtualHost *:80>
  ServerName example.com
  ServerAlias *.example.com
</VirtualHost>

Maintenant, le choix de l'hôte à servir semble plutôt aléatoire. Si je redémarre apache, j'obtiens parfois un hôte et d'autres fois un autre.

Qu'est-ce que je fais de mal ?

Gracias.

Mise à jour : Si je lance apache2ctl -S sur cette configuration, j'obtiens cette sortie :

VirtualHost configuration:
wildcard NameVirtualHosts and \_default\_ servers:
\*:80                   is a NameVirtualHost
         default server www.example.com (/etc/apache2/sites-enabled/dev:3)
         port 80 namevhost www.example.com (/etc/apache2/sites-enabled/dev:3)
         port 80 namevhost example.com (/etc/apache2/sites-enabled/dev:22)

Après avoir beaucoup cherché, j'ai décidé de désactiver les applications mono que j'avais en cours d'exécution et, comme par hasard, il a commencé à servir des fichiers provenant du bon site. Ils ont dû être saisis dans l'ordre :

<VirtualHost *:80>
  ServerName example.com
</VirtualHost>

<VirtualHost *:80>
  ServerName www.example.com
</VirtualHost>

comme suggéré par Wizard. Pour faire fonctionner mes applications mono, j'ai utilisé "MonoAutoApplication enabled" dans chaque hôte virtuel. Cependant, je ne suis pas sûr que ce soit la meilleure option, car sur le site de l site mono il est dit que vous ne devriez pas utiliser l'hébergement automatique pour les applications asp.net mvc (ce que j'utilise). Jusqu'à présent, je ne vois pas d'inconvénient.

5voto

sysadmin1138 Points 129885

Le code devrait probablement être :

<VirtualHost _default_:80>
   ServerName example.com
</VirtualHost>

<VirtualHost *:80>
    ServerName www.example.com
</VirtualHost>

Voir : http://httpd.apache.org/docs/2.2/vhosts/examples.html#default

Ceci définit explicitement le serveur virtuel "exemple.com" comme l'hôte à utiliser si rien d'autre ne correspond.

4voto

mcqwerty Points 2106

Etes-vous sûr que le www.example.com vhost apparaît avant l'autre vhost dans le fichier de configuration ? Apache est censé parcourir les hôtes virtuels dans l'ordre et choisir le premier avec un ServerName o ServerAlias qui correspond à la valeur envoyée dans le Host En-tête HTTP. Il semble très étrange qu'il choisisse au hasard un hôte virtuel et parfois l'autre.

Il pourrait être utile de modifier votre question pour inclure la sortie de

apache2ctl -S

qui montre les hôtes virtuels définis tels qu'Apache les voit.

3voto

Magnus Lindhe Points 2391

Mise à jour : * est une syntaxe valide mais pas nécessaire. Vous pouvez en savoir plus ici .

Mais ça va marcher.

<VirtualHost *:80>
   ServerName example.com
</VirtualHost>

<VirtualHost *:80>
    ServerName www.example.com
</VirtualHost>

La première directive correspondra à tout ce qui n'est pas explicitement défini ailleurs.

1voto

Kostas Points 467

Vous devez ajouter le DocumentRoot à la configuration. Cela devrait être quelque chose comme ceci :

# Ensure that Apache listens on port 80
Listen 80

# Listen for virtual host requests on all IP addresses
NameVirtualHost *:80

<VirtualHost *:80>
DocumentRoot /www/example1
ServerName www.example1.com

# Other directives here

</VirtualHost>

<VirtualHost *:80>
DocumentRoot /www/example2
ServerName www.example2.org

# Other directives here

</VirtualHost>

EDIT : Il semble que je pensais en savoir plus sur Apache que je ne le fais. Merci pour les commentaires.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X