web-dev-qa-db-fra.com

Pourquoi Apache pourrait-il ignorer un hôte virtuel avec un nom de serveur correspondant à l'URL demandée?

J'essaie d'ajouter un deuxième hôte virtuel à ma configuration Apache, mais je n'arrive pas à obtenir le nouvel hôte virtuel à utiliser.

Ma httpd.conf contient juste la ligne suivante:

ServerName radiofreebrighton.org.uk

J'ai aussi un ports.conf fichier, qui contient les éléments suivants:

NameVirtualHost *:80
Listen 80

<IfModule mod_ssl.c>
    Listen 443
</IfModule>

J'ai deux fichiers dans sites-available qui étaient liés à sites-enabled par a2ensite:

  • radiofreebrighton.org.uk
  • trafalgararches.co.uk

Le contenu du premier est:

<VirtualHost _default_:80>
    DocumentRoot /home/tom/www

    ServerAdmin [email protected]
    ServerName radiofreebrighton.org.uk
    ServerAlias www.radiofreebrighton.org.uk

    <Directory /home/tom/www/>
            Options Indexes FollowSymLinks MultiViews
            AllowOverride All
            Order allow,deny
            allow from all
    </Directory>

    ErrorLog /var/log/Apache2/error.log
    LogLevel error
    CustomLog /var/log/Apache2/access.log combined

    Alias /wiki /home/tom/www/mediawiki/index.php
</VirtualHost>

Le contenu de ce dernier est:

<VirtualHost *:80>
    DocumentRoot /home/tom/tata-www

    ServerAdmin [email protected]
    ServerName trafalgararches.co.uk
    ServerAlias www.trafalgararches.co.uk

    <Directory /home/tom/tata-www/>
            Options Indexes FollowSymLinks MultiViews
            AllowOverride All
            Order allow,deny
            allow from all
    </Directory>

    logLevel error
    ErrorLog /var/log/Apache2/error.log
</VirtualHost>

Mais chaque fois que je demande une page à trafalgararches.co.uk, je reçois une page de radiofreebrighton.org.uk. Pourquoi cela pourrait-il arriver? Comment puis-je le réparer?


Modifier:

Configuration de l'hôte virtuel telle que comprise par Apache:

tom@rfb:/usr/local$ Apache2ctl -S
VirtualHost configuration:
wildcard NameVirtualHosts and _default_ servers:
*:80                   is a NameVirtualHost
         default server radiofreebrighton.org.uk (/etc/Apache2/sites-enabled/radiofreebrighton.org.uk:1)
         port 80 namevhost radiofreebrighton.org.uk (/etc/Apache2/sites-enabled/radiofreebrighton.org.uk:1)
         port 80 namevhost trafalgararches.co.uk (/etc/Apache2/sites-enabled/trafalgararches.co.uk:1)
Syntax OK

(Glané via Apache2ctl -S alias httpd -S.)

27
Tom Wright

Cela peut être évident, mais n'oubliez pas de redémarrer le service Apache après avoir activé l'hôte virtuel supplémentaire.

Après avoir exécuté a2ensite pour le deuxième hôte virtuel, la sortie de Apache2ctl -S indique que les deux sites sont configurés (et l'un d'eux est la valeur par défaut), mais il ne sera pas actif tant que vous n'aurez pas rechargé Apache.


Disons que vous avez deux hôtes virtuels - site1 et site2. Vous courez a2ensite site1 puis rechargez le service Apache. Vous pouvez maintenant accéder à http://site1 et c'est la valeur par défaut. Vous exécutez maintenant a2ensite site2, mais oubliez de redémarrer Apache. La sortie de Apache2ctl -S sera:

VirtualHost configuration:
wildcard NameVirtualHosts and _default_ servers:
*:80                   is a NameVirtualHost
         default server site1 (/etc/Apache2/sites-enabled/site1:1)
         port 80 namevhost site1 (/etc/Apache2/sites-enabled/site1:1)
         port 80 namevhost site2 (/etc/Apache2/sites-enabled/site2:1)
Syntax OK

Mais lorsque vous essayez de charger http://site2, il chargera en fait le site par défaut (site1), car la configuration n'est pas chargée.

16
prngleo

J'ai eu un problème similaire où mes vhosts supplémentaires sur le port 443 (SSL/HTTPS) étaient tous dirigés vers le répertoire du premier vhost répertorié. Apache ignorait essentiellement la propriété servername et ne correspondait que sur le port ip :.

Il s'avère que la commande "NameVirtualHost *: 443" me manquait pour activer l'hébergement virtuel nommé pour le port 443.

'NameVirtualHost *: 443' n'a besoin d'être appelé qu'une seule fois et doit être défini au-dessus de vos vhosts pour le port 443. J'ai mis ma définition dans le fichier ports.config pour qu'elle ressemble à:

NameVirtualHost *:80
Listen 80

<IfModule mod_ssl.c>
    NameVirtualHost *:443
    Listen 443
</IfModule>

<IfModule mod_gnutls.c>
    NameVirtualHost *:443
    Listen 443
</IfModule>

N'oubliez pas de redémarrer Apache après toute modification.

15
Lucas

Mes 2 cents: comme je dois m'en tenir à une IP (je ne veux pas que le site soit servi sur tous les réseaux installés), il est arrivé qu'après que l'IP privée locale du serveur ait changé, j'ai oublié de la changer ici:

NameVirtualHost 192.168.100.20:80 <VirtualHost 192.168.100.20:80>

Bien sûr, ce n'est pas un problème Apache de vous faire savoir que l'IP n'existe pas localement.

4
maraboshi

Tom, veuillez regarder ici http://httpd.Apache.org/docs/2.0/en/mod/core.html#namevirtualhost

Remarque

Notez que le "serveur principal" et tous les serveurs par défaut ne seront jamais être servi pour une demande à une adresse IP NameVirtualHost (sauf si pour une raison quelconque vous spécifiez NameVirtualHost mais ne le faites pas définir des VirtualHosts pour cette adresse).

Donc, ça devrait aller si vous changez le par défaut à l'adresse IP de votre serveur.

2
Marcel Kronenberg

Je trouve la réponse d'ici: http://alexking.org/blog/2007/11/01/Apache-2-only-serves-first-virtual-Host

Mettez 2 servername dans la même balise 1 VirtualHost comme ci-dessous:

<VirtualHost *:80>
ServerName beta-site-1.com
DocumentRoot "/Library/WebServer/beta-site-1"

ServerName beta-site-2.com
DocumentRoot "/Library/WebServer/beta-site-2"
</VirtualHost>

J'ai fini par avoir des problèmes avec le deuxième site parce que j'avais deux blocs de balises VirtualHost.

1
Tu Uyen

J'ai découvert que la source de ce problème était une entrée/etc/hosts sur mon serveur avec l'URL pointant vers l'IP externe du serveur.

À un moment donné, je devais le configurer avant que DNS ne soit prêt, j'ai donc entré une entrée/etc/hosts sur mon serveur pointant vers sa propre IP externe:

 1.2.3.4 vhost.example.com 

Ensuite, j'ai configuré un ServerAlias ​​sur un site existant pour "vhost.example.com"

Mais je ne pouvais rien faire pour empêcher Apache de servir le site default-ssl.conf pour les demandes SSL à vhost.example.com. Le port 80 HTTP fonctionnait bien, mais le SSL montrait toujours le site par défaut à la place. À la fin, ce fil SO m'a amené à essayer "apachectl -S" qui montre les sites et finalement j'ai pu le comprendre.

Donc, si vous obtenez le site SSL par défaut au lieu du site que vous attendez, assurez-vous que vous n'avez pas ajouté l'adresse IP externe de votre serveur dans une entrée/etc/hosts! Une chose assez étrange à faire avec le recul, mais j'espère que cela aide quelqu'un d'autre!

1
Professor Falken

J'ai eu ce problème lors de la migration de sites vers un nouveau serveur Ubuntu 16. Après un peu de gratte-tête, j'ai réalisé que le module SSL n'était pas activé par défaut, donc rien à l'intérieur du <IfModule mod_ssl.c> blocs est bien sûr ignoré en silence.

Il y a des années, j'ai enveloppé tous mes vhosts SSL dans cette conditionnelle, et cette fois, je venais de copier les fichiers de configuration sur le nouveau serveur.

Je l'ai corrigé en activant le module:

Sudo a2enmod ssl
0
scipilot