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


26

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.

Mon httpd.confcontient juste la ligne suivante:

ServerName radiofreebrighton.org.uk

J'ai également un ports.conffichier qui contient les éléments suivants:

NameVirtualHost *:80
Listen 80

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

J'ai deux fichiers dans sites-availablelesquels ont été liés sites-enabledpar a2ensite:

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

Le contenu du premier est:

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

    ServerAdmin tom@radiofreebrighton.org.uk
    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 admin@trafalgararches.co.uk
    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 tel que compris 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 -Saka httpd -S.)


1
Pas sûr que ce soit la cause, mais vous devez supprimer les barres obliques aux extrémités de vos lignes ServerNameet ServerAlias. Assurez-vous également d'avoir redémarré Apache.
EEAA

Je suis presque certain que c'est la cause. Cela signifie que le nom d'hôte dans la demande ne correspondra jamais au ServerName pour cet hôte virtuel.
larsks

1
@ErikA, @larsks - Vous avez mis mes espoirs! J'ai supprimé les barres obliques de fin et redémarré apache, mais cela n'a rien changé.
Tom Wright

1
Avez-vous NameVirtualHost *:80quelque part dans votre configuration?
larsks

1
Je ne sais pas si les sites mentionnés ci-dessus sont en production ou en développement, mais en réalité, aller vers ces URL me donne deux pages différentes (des pages correctes à en juger par leur apparence). Si les vhosts ci-dessus sont sur un serveur de développement, ignorez ce commentaire. Sinon, vous pourriez avoir résolu votre problème quelque part en cours de route et avoir toujours une copie en cache.
cyberx86

Réponses:


15

Eh bien, cette question a plus d'un an, mais je suis tombé sur un "problème" similaire. Cela peut être évident, mais n'oubliez pas de redémarrer le service apache après avoir activé l'hôte virtuel supplémentaire. Voir, après l'exécution a2ensitepour le deuxième hôte virtuel, la sortie de apache2ctl -Smontrera que les deux sites sont disponibles (et l'un d'eux est la valeur par défaut), même si vous n'avez pas rechargé Apache.

Disons que vous avez deux hôtes virtuels - site1 et site2. Vous exécutez a2ensite site1puis rechargez le service apache. Vous pouvez maintenant y accéder http://site1et c'est la valeur par défaut. Maintenant vous exécutez a2ensite site2, mais oubliez de redémarrer apache. La sortie de apache2ctl -Ssera:

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 charge en fait le site par défaut (site1), car la configuration n'est pas chargée.


J'obtiens la même sortie mais même alors, il ne charge pas le deuxième site Web.
arqam

15

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.


1
Pour ce que ça vaut ... dans Apache 2.4.18, using NameVirtualHostgénère ce message au démarrage:AH00548: NameVirtualHost has no effect and will be removed in the next release /etc/apache2/ports.conf
Lambart

4

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.


2

Tom, regarde ici http://httpd.apache.org/docs/2.0/en/mod/core.html#namevirtualhost

Remarque

Notez que le « serveur principal » et tout défaut serveurs ne seront servis pour une demande à une adresse IP NameVirtualHost (sauf pour une raison quelconque vous spécifiez NameVirtualHost mais ne définissent pas de VirtualHosts pour cette adresse).

Donc, ça devrait aller si vous changez la valeur par défaut en adresse IP de votre serveur.


J'ai essayé, mais cela n'a rien changé. Je voudrais également éviter de me lier à une adresse IP particulière, donc je vais la modifier. De plus, je dois souligner que le vhost par défaut est celui qui fonctionne.
Tom Wright

1

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.


0

J'ai eu ce problème lors de la migration de sites vers un nouveau serveur Ubuntu 16. Après un peu de grattage de tête, j'ai réalisé que le module SSL n'était pas activé par défaut, donc tout ce qui se trouve à l'intérieur des <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 condition, 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

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 dois l'avoir configuré 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!

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.