Partage
  • Partager sur Facebook
  • Partager sur Twitter

[Ubuntu Server] Apache 2.4 + Vhost

Sujet résolu
    31 mai 2016 à 12:55:16

    Bonjour à tous,

    Je recontre un soucis de configuration de VHOST, en effet si j'active un sous-domaine bien précis (je n'ai pas de soucis avec les autres sous-domaines), celui-ci va override la configuration de mon default.

    Ci-dessous mon VHOST default nommé 0-mon_domaine.fr.conf :

    <VirtualHost _default_:80>
            ServerName domain.fr
            DocumentRoot "/home/www/BlaBla/web"
            DirectoryIndex app.php
            <Directory "/home/www/BlaBla/web">
                    AllowOverride All 
                    Require all granted
                    <IfModule mod_rewrite.c>
                            RewriteEngine On
                         	RewriteCond %{REQUEST_FILENAME} !-f 
                            RewriteRule ^(.*)$ /app.php [QSA,L]
                    </IfModule>
            </Directory>
    	LogFormat "%{X-Forwarded-For}i %l %u %t \"%r\" %>s %b" common_forwarded
      	ErrorLog /var/log/apache2/domain.fr_error.log
      	CustomLog /var/log/apache2/domain.fr_forwarded.log common_forwarded
      	CustomLog /var/log/apache2/domain.fr_access.log combined env=!dontlog
      	CustomLog /var/log/apache2/domain.fr.log combined
    </VirtualHost>

    Ci-dessous le VHOST du sous-domaine en question nommé mon-sous-domaine.fr.conf :

    <VirtualHost *:80>
            ServerName sous-domaine.domaine.fr
            DocumentRoot "/home/www/ToTo/web"
            DirectoryIndex app.php
            <Directory "/home/www/ToTo/web">
                    AllowOverride All
                    Require all granted
                    <IfModule mod_rewrite.c>
                            RewriteEngine On
                            RewriteCond %{REQUEST_FILENAME} !-f
                            RewriteRule ^(.*)$ /app.php [QSA,L]
                    </IfModule>
            </Directory>
    	LogFormat "%{X-Forwarded-For}i %l %u %t \"%r\" %>s %b" common_forwarded
            ErrorLog /var/log/apache2/sous-domaine.domaine.fr_error.log
    CustomLog /var/log/apache2/sous-domaine.domaine.fr_forwarded.log common_forwarded
    CustomLog /var/log/apache2/sous-domaine.domaine.fr_access.log combined env=!dontlog
    CustomLog /var/log/apache2/sous-domaine.domaine.fr.log combined
    </VirtualHost>

    Je repète si j'active le VHOST du sous-domaine mon VHOST default va être override et lorsque je vais taper domaine.fr je vais être redirigé sur le VHOST du sous-domaine.

    Merci d'avance.


    -
    Edité par Adraesh 31 mai 2016 à 12:56:04

    • Partager sur Facebook
    • Partager sur Twitter
    Cordialement, Thomas.
    Anonyme
      31 mai 2016 à 21:21:32

      Bonsoir,

      Je ne suis pas sûr à 100% de ce que je vais dire, mais après lecture de la documentation Apache, voici l'explication ci-dessous. Il s'agit principalement d'une mauvaise compréhension du fonctionnement du VirtualHost _default_.

      C'est assez subtil car il faut bien comprendre comment fonctionne la sélection du VirtualHost à l'arrivée d'une requête HTTP. Le vhost _default_ sert à "attraper" les requêtes qui ne correspondent à aucun vhost. Le terme "default" est assez mal choisi je trouve.

      Le serveur (disons qu'il a l'@IP 192.168.0.1) va d'abord regarder toutes les lignes <VirtualHost @IP:*> et garder toutes celles qui correspondent à la requête entrante.

      Si je prends ta config complète (vhost _defaut_ et * renseignés), quand tu accèdes à ton serveur avec l'adresse "domaine.fr", ton client aurait fait la conversion domaine -> IP (192.168.0.1), le serveur HTTP va recevoir une requête pour 192.168.0.1.

      Du coup Apache va regarder les VirtualHost qui correspondent à 192.168.0.1. Il va uniquement trouver <VirtualHost *:80>. Vu qu'il a trouvé au moins un Vhost qui correspond, le _default_ ne sera même pas vérifié. Du coup comme c'est le seul vhost qui correspond à la requête entrante, c'est ce vhost qui est affiché. En fait vu que c'est le seul vhost qui correspond, ton "ServerName" de <VirtualHost *:80> n'a même pas besoin d'être vérifié. Essaye de mettre "ServerName bidule.truc" et je suis presque sûr que ça fonctionnera quand même.

      Dans la 1ère config, là où seul le vhost _default_ est renseigné, aucun Vhost ne correspond à la requête entrante et ta requête cliente est pourtant correcte. Donc en fait dans ce cas Apache ne trouve aucun Vhost approprié (même pas le vhost _default_ car il est censé "attraper" les requêtes qui ne correspondent à rien), mais vu que c'est le premier vhost qu'il trouve dans ta config, ben c'est celui qu'il choisi quand même, par désespoir :p

      -
      Edité par Anonyme 31 mai 2016 à 21:28:37

      • Partager sur Facebook
      • Partager sur Twitter
        1 juin 2016 à 17:09:44

        Bonsoir à tous,
        Mon problème est résolu et je m'explique.
        Premièrement côté Apache et mes VHOST tout est ok depuis le départ. Le problème étant que j'utilise deux applications Symfony2 qui sont mises à jour grace à Composer. Mes deux applications Symfony2 sont bien dans deux dossiers différents mais utilisent Composer pour l'installation et la mise à jour des bundles extérieurs. Composer utilise lui le cache PHP pour générer ensuite les noms/namespaces des classes Autoloader de chaque application. Le problème était que ce cache n'était pas correctement vidé au moment d'un update/install composer et donc les className/Namespaces d'une application était override par ceux de l'application sur laquelle la commande avait été éxécuté et vice-versa. Ce qui explique que j'avais dans certain cas le contenu du VHOST default d'afficher sur mon autre sous-domaine et dans l'autre cas l'inverse.
        Pour régler le soucis j'ai simplement installé php-apc sur mon serveur, clean mes répertoires vendor des deux applications, éxécuté un nouveau composer install dans chaque applis Symfony et clear les caches respectifs et à présent tout fonctionne à merveille !
        Ci-joint le post qui m'a mis sur la voie : https://github.com/composer/composer/issues/4822
        Merci à tous pour votre soutient, le sujet est clos.

        -
        Edité par Adraesh 1 juin 2016 à 17:10:05

        • Partager sur Facebook
        • Partager sur Twitter
        Cordialement, Thomas.

        [Ubuntu Server] Apache 2.4 + Vhost

        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
        × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
        • Editeur
        • Markdown