web-dev-qa-db-fra.com

VirtualHost retourne toujours l'hôte par défaut avec Apache sur Ubuntu 14.04

J'essaie de configurer un hôte virtuel en plus de la valeur par défaut localhost. Chaque fois que j'essaie d'appeler mon hôte virtuel http://test, je reçois le fichier d'index Apache2 par défaut situé dans le répertoire de http://localhost. De plus, Apache retourne toujours cette page après avoir désactivé (a2dissite) les deux fichiers VirtualHost et Apache rechargé (service Apache2 reload).

Qu'est-ce qui pourrait mal tourner si l'hôte virtuel ne fonctionne pas?

Configuration:

Ma structure de répertoire est la suivante:

/var/www/html                  # Default localhost dir
/var/www/html7index.html       # Apache2 default index

/var/www/test                  # HTML dir for the virtual Host
/var/www/test/index.html       # My "website" 

Contenu de /etc/hosts:

127.0.0.1       localhost
127.0.1.1       Laptop
127.0.0.1       test

Contenu du répertoire de /etc/Apache2/sites-available:

000-default.conf
default-ssl.conf
test.conf

Fichier 000-default.conf:

<VirtualHost localhost:80>
        ServerName localhost
        ServerAdmin webmaster@localhost
        DocumentRoot /var/www/html
        ErrorLog ${Apache_LOG_DIR}/error.log
        CustomLog ${Apache_LOG_DIR}/access.log combined
</VirtualHost>

Fichier test.conf:

<VirtualHost test:80>
        ServerAdmin test@localhost
        ServerName test
        NameVirtualHost test
        ServerAlias test
        DocumentRoot /var/www/test
        ErrorLog ${Apache_LOG_DIR}/error.log
        CustomLog ${Apache_LOG_DIR}/access.log combined
</VirtualHost>
31
Simon

tl; dr: Appelez-le avec Sudo : Sudo service Apache2 reload


On dirait que le comportement de service Apache2 reload m'a dupé. Voir le journal suivant:

user@Laptop:/etc/Apache2/sites-available$ Sudo a2ensite test.conf 
Enabling site test.
To activate the new configuration, you need to run:
  service Apache2 reload
user@Laptop:/etc/Apache2/sites-available$ service Apache2 reload
 * Reloading web server Apache2                                                  * 
user@Laptop:/etc/Apache2/sites-available$

Essayez d’atteindre http://test: NE fonctionne PAS

user@Laptop:/etc/Apache2/sites-available$ Sudo service Apache2 reload
 * Reloading web server Apache2                                                  * 
user@Laptop:/etc/Apache2/sites-available$

Essayez d’atteindre http://test:TRAVAIL

Alors, trouvez la différence! Le fait est que je pensais que cela aurait été rechargé correctement en premier lieu. Il n'y a pas non plus d'entrées dans les fichiers journaux. L'appeler avecSudoa aidé. Est-ce un bug?

43
Simon

J'étais confronté à ce problème et il s'est avéré que je devais désactiver l'hôte virtuel par défaut.

Sudo a2dissite 000-default.conf

Expanation possible:

Selon la documentation Apache Une discussion approfondie sur la correspondance d’hôte virtuel :

[...] Si le serveur principal n'a pas ServerName à ce stade, le nom d'hôte de la machine sur laquelle httpd est exécuté est utilisé à la place.

Cela signifie que si vhost par défaut (généralement 000-default.conf) n’a pas de nom de serveur défini - , qui est celui par défaut - Apache se replie sur le nom d’hôte du système d’exploitation.

En conséquence, Apache sélectionne et sert à partir du vhost par défaut (000-default.conf) même si un autre vhost créé par l'utilisateur avec le même nom de serveur que le nom d'hôte de la machine est configuré.

En effet, Apache trie les hôtes hôtes virtuels par ordre alphabétique par nom de fichier et choisit la première configuration correspondant à l'en-tête d'hôte HTTP demandé. Ainsi, le fichier 000-default.conf est vérifié avant les hôtes virtuels définis par l'utilisateur, car ils ne sont généralement pas précédés du préfixe 000-.

48
Eduardo Dennis

Il suffit de signaler que cela peut être évident pour les utilisateurs expérimentés, mais pas autant si vous êtes un débutant.

assurez-vous que la configuration que vous utilisez dans /sites-enabled se termine par un .conf comme prévu dans votre Apache2.conf

C'était mon problème et ça a résolu le problème.

5
Philll_t

Si vous avez déjà essayé ce qui suit:
1. Autorisations vérifiées de la racine du document et du dossier parent.
2. a2dissite 000-default etc.
3. Apache redémarré avec le service Sudo Apache2 reload
Et il ne fonctionne toujours pas, procédez comme suit:

1. Activer la journalisation du débogage:
vi /etc/Apache2/Apache2.conf
LogLevel debug

2. Redémarrez Apache2 et surveillez les journaux
Sudo service Apache2 restart
tail -f /var/log/Apache2/*.log

3. Si l’adresse IP du serveur apparaît dans les journaux comme prévu:

==> /var/log/Apache2/other_vhosts_access.log <== ip-xxx-xx-xx-xx.eu-west-2.compute.internal: 80 xx.78.xx.2xx - - [13/Sep/2017: 18: 40: 44 +0100] "GET/HTTP/1.1" 200 3509 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv: 55.0) Gecko/20100101 Firefox/55.0"

Vous remarquerez qu'au lieu de xxx.xx.xx.xx: 80 comme une adresse IP typique 
J'ai des noms de domaine complets du type "ip-xxx-xx-xx-xx.eu-west-2.compute.internal: 80"
J'utilise des adresses IP AWS Elastic pour créer une adresse IP fixe pour mon serveur Web Amazon EC2 .

4. Vérifiez la tête du fichier .conf de votre hôte virtuel

<VirtualHost 127.0.0.1:80 11.22.33.44:80>
# Added from nessus to make more secure
RewriteEngine on
RewriteCond %{REQUEST_METHOD} ^(TRACE|TRACK)
RewriteRule .* - [F]
ServerName mydomain.com
...

Ce que nous voyons ici, c'est que nous demandons à Apache de servir ce vhost pour les requêtes de 127.0.0.1 ou 11.22.33.44 sur le port 80. Mais le serveur ne voit jamais ces adresses IP car elles obtiennent cet étrange nom de domaine complet et ne correspondent donc jamais! Eureka!

SOLUTION:
Ajoutez *: 80 à la balise VirtualHost pour ressembler à ceci:

<VirtualHost 127.0.0.1:80 11.22.33.44:80 *:80>


ET relancez Apache. J'espère que ça aide. Il peut y avoir d'autres raisons, mais si c'est la cause de votre problème, il est temps de vous asseoir, de prendre un thé et de vous détendre! Sinon, j'espère que vous trouverez la solution.

PS. N'oubliez pas de remettre vos journaux pour avertir plutôt que pour déboguer!

3
Mark Zaretti

J'ai parcouru toutes ces solutions et aucune d'entre elles n'a fonctionné. Ensuite, j'ai décidé de revenir en arrière et de vérifier le fichier Apache2.conf. J'ai découvert que la ligne pour inclure les fichiers de configuration "sites activés" était commentée par défaut. En supprimant la mise en commentaire de la ligne et en redémarrant Apache, cela a résolu mon problème (il était proche de la fin du fichier):

# Include the virtual Host configurations:
IncludeOptional sites-enabled/*.conf 
2
Dave

si vous conservez les valeurs par défaut avec *: 80; * .443 assurez-vous qu'il est en bas - alors renommez 000-default en zzz-default

1
user2628020

cela me rend fou aussi, j'ai corrigé mes fichiers .conf encore et encore, tout était absolument défini correctement. Je me suis retrouvé sur ce post et j'ai essayé les commandes a2ensite et a2dissite en tant que sudoer, en redémarrant Apache, tout en restant sur la page d'accueil par défaut d'Apache, comme si Apache n'aurait jamais désactivé le site par défaut ni intégré mon nouvel hôte virtuel.

Il s’avère que j’essayais de redémarrer Apache sans utiliser Sudo ...

service Apache2 restart

utilisation 

Sudo service Apache2 restart
1
Arnaud Bouchot

Mon cas sur Apache 2.4, le problème a été résolu en ajoutant le paramètre ci-dessous à la configuration de l'hôte virtuel:

Listen 80

de sorte que les paramètres ressemblent à quelque chose comme:

Listen 80
<VirtualHost *:80>
    ServerAdmin [email protected]
    ServerName testsite.com
    ServerAlias www.testsite.com
    DocumentRoot /var/www/testsite
    ErrorLog ${Apache_LOG_DIR}/error.log
    CustomLog ${Apache_LOG_DIR}/access.log combined
</VirtualHost>
0
baltasvejas

Cela m'a mordu plus d'une fois; Parfois, j'activerais avec Sudo - Parfois, je ne le ferais pas.

Ubuntu 14.04 semble afficher le même message de toute façon. Lorsque vous vous déplacez à 100 miles à l'heure, vous manquez parfois un Sudo ou deux.

Le symptôme du nouveau site Web qui revenait par défaut sur le mauvais répertoire a été mon seul indice: l’activation n’est jamais arrivée. Je dirais que c'est un bug. 

Il faut au moins prévenir quand une commande n'est pas exécutée !!!

0
WBing

Vous devez remplacer le fichier HTML par défaut (/var/www/html/index.html) par votre site ou renommer le fichier en quelque chose comme index.html.bak. Pour une raison quelconque, Apache utilise par défaut le fichier index.html, à moins que vous ne le changiez.

0
Rex Linder

Pour moi, cela a commencé à fonctionner après avoir redémarré Apache avec: Sudo service Apache2 reload. Et en appuyant sur Ctrl + F5 sur http:/test.

0
masteryoda

J'ai vu cela se produire lors de l'utilisation d'un nom de domaine pleinement qualifié (FQDN) dans le fichier/etc/hosts identique à un site auquel je tentais de me connecter. Pour résoudre ce problème, j'ai dû renommer le nom de domaine complet (FQDN) en un nom autre que l'une de mes valeurs VirtualHost ServerName.

En d'autres termes, si mon/etc/hostname était:

Apple

Et dans mon/etc/hosts, j'avais:

192.168.54.34 Apple.example.com Apple

Et dans mon /etc/Apache2/sites-enabled/Apple.example.com.conf, j’avais:

<VirtualHost *:80>
    ServerAdmin [email protected]
    ServerName Apple.example.com
    DocumentRoot /var/www/Apple.example.com
    DirectoryIndex index.html index.php
</VirtualHost>

Apple.example.com serait accepté par le fichier 000-default.conf car il figure également dans le fichier/etc/hosts. Pour résoudre ce problème, je viens de changer le nom de domaine complet de mon serveur comme suit dans le fichier/etc/hostname:

server1

et le fichier/etc/hosts:

192.168.54.34 server1.example.com server1
0
kojow7