Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 31/05/2016, à 20:44

Adraesh

[Ubuntu Server 14.04] Apache 2.4 + Vhost

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 avoir l affichage du contenu du VHOST du sous-domaine.

Note supplémentaire : En fonction du redemarage d'apache le vhost du sous domaine peut override le vhost default et vice-versa.

Merci d'avance.


Modération : merci à l'avenir d'utiliser les balises code (explications ici).

Dernière modification par cqfd93 (Le 31/05/2016, à 20:51)

Hors ligne

#2 Le 31/05/2016, à 22:34

J5012

Re : [Ubuntu Server 14.04] Apache 2.4 + Vhost

<VirtualHost _default_:80>

qu'est-ce que tu as cherché à faire avec cette instruction ? parce qu'elle est erronée ...

Hors ligne

#3 Le 01/06/2016, à 08:21

Adraesh

Re : [Ubuntu Server 14.04] Apache 2.4 + Vhost

J'ai défini ce VHOST comme étant le default, et j'ai désactivé le 000-default.conf d'Apache. De toute manière changer l'instruction _default_ en * ne règle pas mon soucis initial reporté dans mon premier post.

EDIT : De plus l'éxécution de apache2ctl configtest me renvoit syntax OK.

Merci d'avance.

Dernière modification par Adraesh (Le 01/06/2016, à 08:24)

Hors ligne

#4 Le 01/06/2016, à 08:54

bruno

Re : [Ubuntu Server 14.04] Apache 2.4 + Vhost

Désolé de contredire J5012 mais cette syntaxe est correcte, elle équivalente à l'utilisation du *

réf. : http://httpd.apache.org/docs/current/fr … irtualhost

Sinon il faut lire attentivement la doc apache sur les hôtes virtuels par nom, notamment :

Si plusieurs serveurs virtuels possèdent cette même paire adresse IP/port, Apache va ensuite comparer les valeurs des directives ServerName et ServerAlias avec le nom de serveur présent dans la requête.

Si tes noms de domaines ont bien des enregistrements DNS correspondant à l'IP de ton serveur (vérifier ipv4 et ipv6), au vu de tes fichiers d'hôtes cela devrait fonctionner correctement. Le problème vient plus probablement des sites eux-mêmes…

Peux-tu essayer de déplacer la directive :

DirectoryIndex app.php

dans les sections <Directory…> ?

Et aussi vérifier la présence et le contenu des fichiers .htaccess à la racine de tes sites.

Dernière modification par bruno (Le 01/06/2016, à 08:56)


Attention, les bouteilles vendues par Nestlé Waters sont contaminées au monoxyde de dihydrogène.

Hors ligne

#5 Le 01/06/2016, à 08:58

Adraesh

Re : [Ubuntu Server 14.04] Apache 2.4 + Vhost

Bonjour Bruno et merci pour ta réponse.

J'ai testé en déplaçant la directive dans la section Directory, le problème reste le même.

Merci à toi.

Hors ligne

#6 Le 01/06/2016, à 09:04

bruno

Re : [Ubuntu Server 14.04] Apache 2.4 + Vhost

Et les fichiers .htaccess, tu as regardé ?
Sinon, il serait peut-être utile de tester tes sites avec un outil qui permet de voir les en-têtes HTTP (wget ou une extension Firefox)


Attention, les bouteilles vendues par Nestlé Waters sont contaminées au monoxyde de dihydrogène.

Hors ligne

#7 Le 01/06/2016, à 09:19

Adraesh

Re : [Ubuntu Server 14.04] Apache 2.4 + Vhost

Bruno,

Les deux VHOSTs cités concernent 2 applications Symfony (Framework PHP), si ça peut aider. Le Framework crée effectivement un .htaccess dans le répertoire /web de l'application ciblé par les VHOST, et c'est le même pour les deux applications :

# Use the front controller as index file. It serves as a fallback solution when
# every other rewrite/redirect fails (e.g. in an aliased environment without
# mod_rewrite). Additionally, this reduces the matching process for the
# start page (path "/") because otherwise Apache will apply the rewriting rules
# to each configured DirectoryIndex file (e.g. index.php, index.html, index.pl).
DirectoryIndex app.php

# Disabling MultiViews prevents unwanted negotiation, e.g. "/app" should not resolve
# to the front controller "/app.php" but be rewritten to "/app.php/app".
<IfModule mod_negotiation.c>
    Options -MultiViews
</IfModule>

<IfModule mod_rewrite.c>
    RewriteEngine On

    # Determine the RewriteBase automatically and set it as environment variable.
    # If you are using Apache aliases to do mass virtual hosting or installed the
    # project in a subdirectory, the base path will be prepended to allow proper
    # resolution of the app.php file and to redirect to the correct URI. It will
    # work in environments without path prefix as well, providing a safe, one-size
    # fits all solution. But as you do not need it in this case, you can comment
    # the following 2 lines to eliminate the overhead.
    RewriteCond %{REQUEST_URI}::$1 ^(/.+)/(.*)::\2$
    RewriteRule ^(.*) - [E=BASE:%1]

    # Sets the HTTP_AUTHORIZATION header removed by apache
    RewriteCond %{HTTP:Authorization} .
    RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]

    # Redirect to URI without front controller to prevent duplicate content
    # (with and without `/app.php`). Only do this redirect on the initial
    # rewrite by Apache and not on subsequent cycles. Otherwise we would get an
    # endless redirect loop (request -> rewrite to front controller ->
    # redirect -> request -> ...).
    # So in case you get a "too many redirects" error or you always get redirected
    # to the start page because your Apache does not expose the REDIRECT_STATUS
    # environment variable, you have 2 choices:
    # - disable this feature by commenting the following 2 lines or
    # - use Apache >= 2.3.9 and replace all L flags by END flags and remove the
    #   following RewriteCond (best solution)
    RewriteCond %{ENV:REDIRECT_STATUS} ^$
    RewriteRule ^app\.php(/(.*)|$) %{ENV:BASE}/$2 [R=301,L]

    # If the requested filename exists, simply serve it.
    # We only want to let Apache serve files and not directories.
    RewriteCond %{REQUEST_FILENAME} -f
    RewriteRule .? - [L]

    # Rewrite all other queries to the front controller.
    RewriteRule .? %{ENV:BASE}/app.php [L]
</IfModule>

<IfModule !mod_rewrite.c>
    <IfModule mod_alias.c>
        # When mod_rewrite is not available, we instruct a temporary redirect of
        # the start page to the front controller explicitly so that the website
        # and the generated links can still be used.
        RedirectMatch 302 ^/$ /app.php/
        # RedirectTemp cannot be used instead
    </IfModule>
</IfModule>

Encore merci à toi.

Hors ligne

#8 Le 01/06/2016, à 09:57

bruno

Re : [Ubuntu Server 14.04] Apache 2.4 + Vhost

Sans en être sûr j'ai l'impression que le problème vient des règles de réécriture dans les .htaccess

Je te suggère d'y remplacer :

    RewriteCond %{REQUEST_URI}::$1 ^(/.+)/(.*)::\2$
    RewriteRule ^(.*) - [E=BASE:%1]

par
   

RewriteBase /

ou de commenter ces deux lignes.


Attention, les bouteilles vendues par Nestlé Waters sont contaminées au monoxyde de dihydrogène.

Hors ligne

#9 Le 01/06/2016, à 10:01

Adraesh

Re : [Ubuntu Server 14.04] Apache 2.4 + Vhost

Bruno,

Je viens de tester tes deux solution, le problème reste inchangé.

Merci pour ton aide !

Hors ligne

#10 Le 01/06/2016, à 13:42

bruno

Re : [Ubuntu Server 14.04] Apache 2.4 + Vhost

Désolé, je ne vois pas d'où vient le problème…
Vérifie quand même :
- tes enregistrements DNS pour tes noms de domaines en IPv4 (et Ipv6 si ton serveur est accessible en Ipv6) ;
- en déactivant complètement les htaccess (Allowoverride none dans les fichiers d'hôtes). De toute façon il y a des directives redondantes entre les configurations des hôtes et les .htaccess.


Attention, les bouteilles vendues par Nestlé Waters sont contaminées au monoxyde de dihydrogène.

Hors ligne

#11 Le 01/06/2016, à 17:07

Adraesh

Re : [Ubuntu Server 14.04] Apache 2.4 + Vhost

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érent mais utilise Composer pour l'installation et la mise à jour des bundles extérieur. Composer utilise lui le cache PHP pour générer ensuite les noms/namespaces des classes Autoloader de chaque applications. 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.

Hors ligne