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 14/02/2015, à 14:05

Vorona

[RÉSOLU] Apache et 14.04 : accès au bon répertoire d'un VirtualHost

CONFIGURATION DE APACHE2 SOUS UBUNTU 14.04

Edit : Ce message peut témoigner des difficultés dues à une mauvaise compréhension du fonctionnement et de la configuration du serveur Apache2 - les solutions que j'avais trouvées ne sont pas satisfaisantes mais les réponses sont instructives.

Je ne suis pas un spécialiste des serveurs, loin s'en faut, mais j'imagine que ma galère passée peut servir à d'autres et je vais tenter de décrire le chemin qui évite les embûches ...

Pour ARRIVER OÙ ? ->  accéder à plusieurs sites web en développement local, donc en utilisant
la fonctionnalité de virtualhost sur sa machine uniquement
.
Pas de réseau local sauf localhost.

En bref j'ai dû remplacer dans mes fichiers .conf <VirtualHost *:80> par <VirtualHost www.monsite.com:80> même si ça ne semblait pas correspondre à la documentation.

Le problème était qu'après avoir installé les sites comme préconisé dans la doc et sur la plupart
des forums, je ne pouvais pas accéder à mes sites parce qu'en les demandant à mon navigateur je
n'obtenais au mieux qu'un répertoire au-dessus (/var/www ou /var/www/html - semblant correspondre
à localhost) ou alors un site par défaut. (Les réflexes des browsers qui vous redirigent vers ce
qu'ils ont trouvé de mieux auparavant n'aident pas à diagnostiquer le problème ...:().

Je n'ai pas tout compris après 3 jours de recherches (avec un peu de nuits)... mais ça marche.
Voici ce que j'ai pu retirer des forums et de mes propres expérimentations :

   * Mettre plusieurs sites sur 127.0.0.1 n'a pas l'air si courant que ça (ou alors pourquoi la façon
   de le faire est-elle si peu évidente ? roll) ;
   les outils de config d'Apache 2.4 semblent plus orientés vers des VirtualHosts hébergés sur
   différentes adresses IP internes (différentes machines) - ou alors I missed something.

   * La plupart des intervenants-ressources sur les forums ne semblent pas avoir les problèmes
   que j'ai rencontrés - mais la plupart des demandeurs étaient sous Ubuntu 14.04 (comme moi)
   - ou avoisinant. Cela m'a fait penser à une certaine spécificité d'Ubuntu pour Apache, parfois
   signalée. Je ne peux l'assurer.

   * L'interaction /etc/hosts <-> /etc/apache2/... me semble importante. L'hôte demandé dans le
   navigateur sera d'abord recherché dans le fichier hosts avant le serveur DNS - s'il est
   interprété comme un hôte local le serveur apache sera sollicité, sinon la requête sera dirigée
   sur le réseau. Il semble qu'il y ait à la fois résolution du nom renvoyant à l'adresse IP
   et résolution de l'adresse IP pouvant renvoyer à plusieurs sites dès lors que 127.0.0.1
   renvoie dans hosts à plusieurs sites possibles (pas sur la même ligne en principe). Mais
   la configuration de VirtualHost joue un rôle essentiel ; j'ai cru déceler le fonctionnement
   suivant (attention ce ne sont que mes interprétations) :
      - la recherche semble se faire d'abord sur hosts ;
      - si hosts renvoie un match, le serveur apache est appelé sur cette adresse ;
      - s'il trouve une correspondance dans ses VirtualHosts celle-ci est ouverte, en principe
      dans son répertoire dédié ;
      - s'il ne trouve pas de correspondance il ouvre un site par défaut, soit qui a une
      définition plus large (*:80 au lieu de 127.0.0.1:80 par exemple) soit qui est premier
      dans sites-enabled.conf - d'autres règles peuvent intervenir mais il est difficile de les
      distinguer des règles des browsers qui peuvent aller chercher d'eux-mêmes des adresses
      plus compatibles lorsque celle qui est demandée ne fonctionne pas hmm ;
      - si hosts ne renvoie pas de match la requête passe au serveur DNS web.

   * Normalement la documentation de apache 2.4 et la plupart des intervenants-ressources se fient
   aux éléments suivants :
      - apache2.conf ou httpd.conf doit en gros être paramétré selon les défauts, mais il faut ajouter
   quelque part les instructions <Directory> qui vont interdire certains accès et en admettre
   d'autres ; ça se trouve dans la section "securité" (# Sets the default security model of the
   Apache2 HTTPD server ...) - il n'est plus nécessaire de compléter des instructions <Directory> dans
   les sections de configuration des VirtualHosts (soit dans sites-available) si elle sont bien
   définies à cet endroit - ce n'est pas interdit non plus ;
      - mettre "HostnameLookups" à "on" dans apache2.conf a été évoqué comme un point-clé
      (http://stackoverflow.com/questions/1951 … 7#19521307)
      mais immédiatement contesté parce que la documentation dit que cela ne sert qu'à récupérer le
      nom du client (s'il existe), par reverse dns, au lieu de stocker son IP, ce qui est bien moins
      coûteux (si vous vous connectez au serveur depuis www.machin.com,
      IP 55.55.55.55, si l'option est à "on" le serveur gardera la mémoire de la connection de
      www.machin.com au lieu de l'IP) ;
      - les VirtualHosts doivent être déclarés dans des fichiers .conf - ils commencent par
      "<VirtualHost <IP>:<port>>" - et pour une config en accès local on propose généralement :
      <VirtualHost *:80> ;
      - le dossier de ce VH doit se trouver depuis 2.4 dans /var/www/html ;
      - ce VHost doit être déclaré dans hosts ("127.0.0.1 www.monsite.com monsite.com ...") ;
      - le serveur par défaut est défini par un fichier tel que 000-default.conf ou autre nom garantissant une
      priorité dans l'ordre alphanumérique et recevra donc les erreurs.

   * Il semble que sous Ubuntu 14.04 et peut-être d'autres distros cela ne marche pas comme ça -
   et effectivement je n'y suis pas arrivé de cette manière. C'est pourquoi dans ma config , en
   suivant des recommandations trouvées sur le web et en particulier sur le forum déjà cité ci-
   dessus, j'ai dû :
      - déclarer chaque site VH avec sa dénomination, par exemple :

      <VirtualHost [url=http://www.monsite.com:80]www.monsite.com:80[/url]>
      	ServerName [url=http://www.monsite.com]www.monsite.com[/url]
         # (la correspondance entre VH et ServerName ne semble pas obligatoire)
      	ServerAlias *.monsite.com
      	ServerAdmin webmaster@localhost
      	DocumentRoot /var/www/html/monsite
         # ou DocumentRoot /var/www/html/monsite.public_html
      	ErrorLog ${APACHE_LOG_DIR}/error.log
      	CustomLog ${APACHE_LOG_DIR}/access.log combined
         # (ou personnaliser ces deux dernières lignes)
      /VirtualHost>

      - déclarer le site par défaut 000_default.conf de la façon suivante :

 

    <VirtualHost 127.0.0.1:80>
      # si on met *:80 ça ne marche pas
	      ServerAdmin webmaster@localhost
	      DocumentRoot /var/www/html/default
	      ErrorLog ${APACHE_LOG_DIR}/error.log
	      CustomLog ${APACHE_LOG_DIR}/access.log combined
      </VirtualHost>

      - les répertoires correspondants : default, monsite1, mon site2, ... se trouvent sous
      /var/www/html ; dans default, on met une page web simple, genre "la page demandée n'existe
      pas sur ce serveur" ...

      - dans hosts, localhost est déclaré en premier :

127.0.0.1	localhost.localdomain localhost 
127.0.0.1	[url=http://www.monsite1.com]www.monsite1.com[/url] monsite1.com monsite1
127.0.0.1	[url=http://www.monsite2.com]www.monsite2.com[/url] monsite2.com monsite2
127.0.1.1	TheMainServer

      pourquoi ? Je sais plus - je crois que sinon on a du mal à tomber sur le site par défaut
      (000_default) en cas de demande d'un site local inexistant ;

      - de façon non obligatoire, le ServerName global (pour éviter des remarques de apache2 au
      démarrage : "Could not reliably determine the server's fully qualified domain name ...")
      est déclaré dans apache2.conf (n'importe où) :
     
         ServerName localhost
      (on doit pouvoir mettre autre chose ?)

      * Je crois n'avoir rien oublié d'important, mais tout cela ne dispense pas des connaissances
      de base sur la configuration d'apache (Directives DocumentRoot, Options, Allow, Require
      notamment à placer entre les balises <Directory>) ...

      * ... et ne pas oublier que les répertoires ne prennent pas de / final dans les DocumentRoot.

      * Enfin, tout cela ne concerne pas forcément les sites en production ou sur des machines
      différentes d'un réseau local, où les VHosts seront déclarés dans hosts sous d'autres IP
      que 127.0.0.1 ...
     
      * et je n'ai pas parlé des questions des droits en écriture (pour un site dynamique,
      c'est quand même important), des dossiers appartenant à www-data ou non, des liens
      symboliques ... pour la bonne raison que je n'ai pas encore suffisamment expérimenté.

      * Malheureusement cette configuration ne semble pas autoriser la résolution des noms par alias,
      puisqu'on dit aux serveur virtuels (VirtualHosts) de n'écouter que des noms de site précis
      (sauf celui par défaut, mais ça ne change rien) sad. AInsi si j'ai déclaré *.monsite.com comme alias
      pour un ServerName www.monsite.com et une déclaration <VirtualHost www.monsite.com:80>,
      même avec les bonnes déclarations dans hosts, je suis obligé de taper le nom complet pour
      arriver sur "monsite", sinon j'ai juste droit à un "Adresse introuvable"... roll

Voilà, dans l'espoir que cela puisse éviter un jour à quelqu'un les 36 heures de recherche que je viens de me taper allègrement ! Et qui malgré tout n'apportent pas de solution conforme à ce qu'elle devrait être d'après la
documentation ... Si quelqu'un a mieux !

Dernière modification par Vorona (Le 17/02/2015, à 13:40)

Hors ligne

#2 Le 14/02/2015, à 17:33

Vorona

Re : [RÉSOLU] Apache et 14.04 : accès au bon répertoire d'un VirtualHost

Pendant que j'y suis, en m'inspirant en partie de ce tuto d'Ubuntu-fr.org, mais sans créer d'alias, j'ai remplacé le dossier du site placé dans /var/www/html par un lien symbolique en suivant en gros les étapes suivantes :

  1. supprimer le dossier en question dans /var/www/html, à condition de l'avoir sur son répertoire perso bien sûr big_smile ;

  2. passer le dossier du site, situé sur son répertoire perso donc, à l'utilisateur et groupe www-data (pour que l'utilisateur Apache, c'est lui, puisse écrire dedans) ;

  3. passer les droits de toute la chaîne des répertoires de /home jusqu'au dossier en 755, en principe il suffit de la faire à partir du répertoire de plus haut niveau dans son répertoire personnel ;

  4. mettre les droits du dossier su site en 775 et mettre son propre utilisateur en tant que membre du groupe www-data (sinon  on ne pourra pas écrire dedans !) ;

  5. finalement créer le lien symbolique dans var/www/html avec le même nom que son dossier cible, puisque c'est le nom donné dans le paramétrage d'Apache.

Je crois que je n'ai rien oublié. En gros ça donne :

$ sudo rm -rf /var/www/html/monsite
$ sudo chown -R www-data:www-data /home/user/www/monsite
$ chmod -R 755 ~/www
$ chmod -R 775 ~/www/monsite
$ sudo adduser user www-data
$ sudo ln -s /home/user/www/monsite /var/www/html/monsite

J'espère ne pas avoir créé de faille de sécurité, je ne le pense pas mais si vous avez un doute, merci de le partager !

Dernière modification par Vorona (Le 15/02/2015, à 10:17)

Hors ligne

#3 Le 14/02/2015, à 17:45

rilemre

Re : [RÉSOLU] Apache et 14.04 : accès au bon répertoire d'un VirtualHost

Bonjour Vorona,

je ne trouve pas très clair ton message, du coup, je me permets de la compléter un peu.

Vorona a écrit :

CONFIGURATION DE APACHE2 SOUS UBUNTU 14.04

14/02/2015 (Joyeuse Saint-Valentin !)

   * Mettre plusieurs sites sur 127.0.0.1 n'a pas l'air si courant que ça (ou alors pourquoi la façon
   de le faire est-elle si peu évidente ? roll) ;

elle l'est et si c'est courant chez les developpeurs web.

Vorona a écrit :

   * La plupart des intervenants-ressources sur les forums ne semblent pas avoir les problèmes
   que j'ai rencontrés - mais la plupart des demandeurs étaient sous Ubuntu 14.04 (comme moi)
   - ou avoisinant. Cela m'a fait penser à une certaine spécificité d'Ubuntu pour Apache, parfois
   signalée. Je ne peux l'assurer.

il n'y en a pas.

Vorona a écrit :

   * L'interaction /etc/hosts <-> /etc/apache2/... me semble importante. L'hôte demandé dans le
   navigateur sera d'abord recherché dans le fichier hosts avant le serveur DNS - s'il est
   interprété comme un hôte local le serveur apache sera sollicité, sinon la requête sera dirigée
   sur le réseau. Il semble qu'il y ait à la fois résolution du nom renvoyant à l'adresse IP
   et résolution de l'adresse IP pouvant renvoyer à plusieurs sites dès lors que 127.0.0.1
   renvoie dans hosts à plusieurs sites possibles (pas sur la même ligne en principe). Mais
   la configuration de VirtualHost joue un rôle essentiel ; j'ai cru déceler le fonctionnement
   suivant (attention ce ne sont que mes interprétations) :
      - la recherche semble se faire d'abord sur hosts ;
      - si hosts renvoie un match, le serveur apache est appelé sur cette adresse ;
      - s'il trouve une correspondance dans ses VirtualHosts celle-ci est ouverte, en principe
      dans son répertoire dédié ;
      - s'il ne trouve pas de correspondance il ouvre un site par défaut, soit qui a une
      définition plus large (*:80 au lieu de 127.0.0.1:80 par exemple) soit qui est premier
      dans sites-enabled.conf - d'autres règles peuvent intervenir mais il est difficile de les
      distinguer des règles des browsers qui peuvent aller chercher d'eux-mêmes des adresses
      plus compatibles lorsque celle qui est demandée ne fonctionne pas hmm ;
      - si hosts ne renvoie pas de match la requête passe au serveur DNS web.

oui, mais:

- ne mélangeons pas les choses. tu veux afficher site1
- résolution dns: tu veux afficher une page sur ton navigateur. la premiere chose que fait le navigateur est d'aller consulter le /etc/hosts sous les noyaux debian. s'il ne trouve rien, c'est les dns qui sont effectivement exploités.
- une fois que tu as une ip, t'es capable de définir un schema. en l'occurence dans ton cas, 127.0.0.1:80
- 80: c'est apache qui ecoute et qui recoit.  il se dit, qu'est ce que l'on me demande? afficher site1.
- apache regarde dans sa conf de vhosts: je trouve quelque chose, c'est la configuration du vhost qui la prend en compte, sinon, c'est renvoyé sur le comportement par défaut => "it works"

Vorona a écrit :

      - mettre "HostnameLookups" à "on" dans apache2.conf a été évoqué comme un point-clé
      (http://stackoverflow.com/questions/1951 … 7#19521307)
      mais immédiatement contesté parce que la documentation dit que cela ne sert qu'à récupérer le
      nom du client (s'il existe), par reverse dns, au lieu de stocker son IP, ce qui est bien moins
      coûteux (si vous vous connectez au serveur depuis www.machin.com,
      IP 55.55.55.55, si l'option est à "on" le serveur gardera la mémoire de la connection de
      www.machin.com au lieu de l'IP) ;

un point clé de quoi? que tu puisses accéder a tes sites en local?  si c'est bien ce que tu sous entends, cela n'a effectivement rien a voir: HostnameLookups resoud l'adresse des noms de machine distante (les clients).

Vorona a écrit :

   * Il semble que sous Ubuntu 14.04 et peut-être d'autres distros cela ne marche pas comme ça -
   et effectivement je n'y suis pas arrivé de cette manière. C'est pourquoi dans ma config , en
   suivant des recommandations trouvées sur le web et en particulier sur le forum déjà cité ci-
   dessus, j'ai dû :
      - déclarer chaque site VH avec sa dénomination, par exemple :

      <VirtualHost [url=http://www.monsite.com:80]www.monsite.com:80[/url]>
      	ServerName [url=http://www.monsite.com]www.monsite.com[/url]
         # (la correspondance entre VH et ServerName ne semble pas obligatoire)
      	ServerAlias *.monsite.com
      	ServerAdmin webmaster@localhost
      	DocumentRoot /var/www/html/monsite
         # ou DocumentRoot /var/www/html/monsite.public_html
      	ErrorLog ${APACHE_LOG_DIR}/error.log
      	CustomLog ${APACHE_LOG_DIR}/access.log combined
         # (ou personnaliser ces deux dernières lignes)
      /VirtualHost>

      - déclarer le site par défaut 000_default.conf de la façon suivante :

 

    <VirtualHost 127.0.0.1:80>
      # si on met *:80 ça ne marche pas
	      ServerAdmin webmaster@localhost
	      DocumentRoot /var/www/html/default
	      ErrorLog ${APACHE_LOG_DIR}/error.log
	      CustomLog ${APACHE_LOG_DIR}/access.log combined
      </VirtualHost>

      - les répertoires correspondants : default, monsite1, mon site2, ... se trouvent sous
      /var/www/html ; dans default, on met une page web simple, genre "la page demandée n'existe
      pas sur ce serveur" ...ote=Vorona]
      - les VirtualHosts doivent être déclarés dans des fichiers .conf - ils commencent par
      "<VirtualHost <IP>:<port>>" - et pour une config en accès local on propose généralement :
      <VirtualHost *:80> ;

les fichiers de configuration des virtualhost utilisés par apache par défaut stockés dans /etc/apache2/sites-enabled.
il me semble qu'en apache 2.2 c'est tout ce que tu trouves dedans, en 2.4 *.conf.
Tout ca est controlé par la directive Include(Optional) sites-enabled/*.conf que tu trouves dans le fichier /etc/apache2/apache2.conf

Vorona a écrit :

      - le dossier de ce VH doit se trouver depuis 2.4 dans /var/www/html ;

Reformulons: Les sources du site controlé par le virtualhost se trouvent généralement dans...

Vorona a écrit :

      - dans hosts, localhost est déclaré en premier :

       

 127.0.0.1	localhost.localdomain localhost 
         127.0.0.1	[url=http://www.monsite1.com]www.monsite1.com[/url] monsite1.com monsite1
         127.0.0.1	[url=http://www.monsite2.com]www.monsite2.com[/url] monsite2.com monsite2
         127.0.1.1	TheMainServer

      pourquoi ? Je sais plus - je crois que sinon on a du mal à tomber sur le site par défaut
      (000_default) en cas de demande d'un site local inexistant ;

ca n'a rien a voir. si tu le mets a la fin, ca ne changera rien.
le /etc/hosts joue sur la résolution de nom.

Vorona a écrit :

      * ... et ne pas oublier que les répertoires ne prennent pas de / final dans les DocumentRoot.

oui

Vorona a écrit :

      * Malheureusement cette configuration ne semble pas autoriser la résolution des noms par alias,
      puisqu'on dit aux serveur virtuels (VirtualHosts) de n'écouter que des noms de site précis
      (sauf celui par défaut, mais ça ne change rien) sad. AInsi si j'ai déclaré *.monsite.com comme alias
      pour un ServerName www.monsite.com et une déclaration <VirtualHost www.monsite.com:80>,
      même avec les bonnes déclarations dans hosts, je suis obligé de taper le nom complet pour
      arriver sur "monsite", sinon j'ai juste droit à un "Adresse introuvable"... roll

dans ce cas, ce n'est pas du NamedVirtualHost qu'il faut exploiter mais *:80:
quand tu mentionnes:

Vorona a écrit :

<VirtualHost 127.0.0.1:80>
      # si on met *:80 ça ne marche pas

c'est logique: il ne sait pas a qui sont adressées les instruction. il te faut une balise ServerName.
Dans le fichier de configuration par défaut d'apache, il y en a une qui est

ServerName localhost

Cordialement,

Hors ligne

#4 Le 14/02/2015, à 17:48

rilemre

Re : [RÉSOLU] Apache et 14.04 : accès au bon répertoire d'un VirtualHost

salut,

Voici la procédure que j'utilises pour des vhosts que j'exploite tous les jours:

1 - definit tes hotes dans le fichiers /etc/hosts

monsite1 127.0.0.1
monsite2 127.0.0.1

2 - définir les vhosts pour chacun de tes sites. la bonne pratique veut que tu ais un fichier dédié pour chaque site:

2.1 contenus des fichiers de configurations

* fichier de configuration du site 1, que nous appelerons site1.conf*

<VirtualHost *:80>
        ServerName monsite1
       DocumentRoot /chemin/de/tes/sources/du/site/1 
        <Directory /chemin/de/tes/sources/du/site/1>

       </Directory>
</VirtualHost>

* fichier de configuration du site 2, que nous appelerons site2.conf*

<VirtualHost *:80>
        ServerName monsite2
       DocumentRoot /chemin/de/tes/sources/du/site/2
        <Directory /chemin/de/tes/sources/du/site/2>

       </Directory>
</VirtualHost>

2.2 où mettre ces fichiers de configuration?

Ce qui est interprété par apache que ce soit du 2.2, du 2.4 est le contenu du fichier /etc/apache2/sites-enabled.
Donc la structure finale tu dois donc avoir

/etc/apache2/sites-enabled/000-default.conf
/etc/apache2/sites-enabled/site1.conf
/etc/apache2/sites-enabled/site2.conf

Sauf que ce n'est pas très clean. Il est préférable de gérer la configuration dans le dossier /etc/apache2/sites-available/ et de faire des liens symboliques sur ces fichiers dans sites-enabled:
- sites-avaialble => gestionnaire de configuration
- sites-enabled => gestionnaire d'activation

donc avoir:

/etc/apache2/sites-available/site1.conf
/etc/apache2/sites-available/site2.conf
/etc/apache2/sites-enabled/000-default.conf
/etc/apache2/sites-enabled/site1.conf -> ../sites-available/site1.conf
/etc/apache2/sites-enabled/site2.conf -> ../sites-available/site2.conf

et on ne touche pas au fichier 000-default.conf, ca n'a pas d'interet.

Cdlt,

Hors ligne

#5 Le 14/02/2015, à 18:43

Vorona

Re : [RÉSOLU] Apache et 14.04 : accès au bon répertoire d'un VirtualHost

Bonsoir rilemre et d'abord, déjà merci, vraiment, pour une réponse aussi documentée.

A tout-à-l'heure.

Hors ligne

#6 Le 14/02/2015, à 20:33

Vorona

Re : [RÉSOLU] Apache et 14.04 : accès au bon répertoire d'un VirtualHost

Alors après lecture, merci encore pour tes réponses, et pour les précisions que tu apportes. J'ai des notions de base et j'ai pas mal exploré les forums et essayé de résoudre mon problème de façon logique, mais je suis d'accord sur la clarté de mon propos qui n'est certainement pas au top faute de connaissances suffisamment précises. Tes compléments pourront éviter de mauvaises interprétations sources d'erreurs.

En passant, quelques réactions à chaud :

  • je comprends bien que mettre plusieurs sites sur localhost (ou 127.0.0.1, désolé encore pour mon imprécision) est courant, un serveur virtuel est quand même fait pour mettre plusieurs sites sous la même IP - je voulais signaler que dans certains cas, et après avoir écumé la doc et les forums, on restait quand même bien en panne !

  • j'ai forcément récolté dans mes recherches quelques récriminations contre Ubuntu (auquel je suis fidèle depuis 2006 et auquel je tente de convertir mes proches et collègues - et que j'ai installé dans mon environnement de travail), ma philosophie est de ne pas les ignorer mais d'essayer de les comprendre. Tu affirmes qu'il n'y a pas de spécificité d'Ubuntu concernant Apache et cela est rassurant, mais dans ce cas il faut que je comprenne autrement les difficultés que je rencontre : j'y suis tout disposé - une argumentation m'aiderait.

  • Le "point-clé" du HostnameLookups c'était un semblant de découverte à 3 h du mat en étant épuisé de ne pas trouver. Je ne l'ai signalé, peut-être pas assez explicitement, que comme un piège, une impasse.

Après pour tout le reste je suis complètement OK, mis à part une certaine incompréhension quant à "il te faut une balise ServerName". En tous cas j'ai essayé sans succès de mettre "ServerName localhost" dans mon fichier apache2.conf, ça n'a rien changé, à part d'éviter un warning de Apache au restart. Mes fichiers .conf sont comme tu le dis et je me sers de a2ensite pour créer les liens sites-available vers sites-enabled . Et j'ai bien un fichier dédié pour chaque site, construit comme tu le recommandes.

Au total, comment on fait pour éviter de recourir à la solution que je décris ? Enfin , s'il faut l'éviter, j'en sais rien ! Je peux donner ma config complète pour voir ce qui va pas. Si ça va pas ...

En tous cas encore merci pour tes remarques et si tu as d'autres réactions, merci de me permettre d'avancer.

Dernière modification par Vorona (Le 14/02/2015, à 20:38)

Hors ligne

#7 Le 16/02/2015, à 10:25

tiramiseb

Re : [RÉSOLU] Apache et 14.04 : accès au bon répertoire d'un VirtualHost

Salut,

Que de longs messages ! En général je réponds point par point, mais là ça me décourage.
Alors voici quelques points sur lesquels je pense qu'une précision est nécessaire.


0/ Spécificités d'Ubuntu ?

Il n'y a pas d'énorme spécificité liée à Ubuntu, non. Les paquets de la version 2.4 voient leur configuration légèrement modifiée, mais a priori ça provient surtout de Debian, pas d'Ubuntu.
Il s'agit notamment de limitations afin d'améliorer la sécurité pour éviter aux néophytes de créer des trous béants (voir le point 4 ci-dessous).


1/ le fichier /etc/hosts

Ce fichier n'est pas utile pour le serveur web mais pour le client : en simplifié, c'est le navigateur qui va lire /etc/hosts avant d'interroger le serveur DNS pour savoir à quelle adresse IP se connecter.

Définir les noms dans /etc/hosts permet donc de dire au navigateur d'interroger la machine locale. Le serveur, lui, il n'en a rien à foutre.

Comme tu l'as précisé, HostnameLookups n'a rien à voir avec ça.


2/ la définition des virtualhosts

Tu as peut-être mal compris "la documentation", ou alors le document que tu as lu explique mal : tu n'as pas dit ce qu'est pour toi "la doc".

Pour moi, "la doc" à propos des vhosts c'est ça :
http://httpd.apache.org/docs/2.4/fr/vho … based.html

La ligne d'ouverture du virtualhost dit sur quelle interface écouter, elle ne précise pas le nom du virtualhost.
http://httpd.apache.org/docs/2.2/fr/mod … irtualhost

La plupart du temps, la syntaxe à appliquer est :

<VirtualHost *:80>

Toute autre définition relève de cas particuliers.


3/ ServerName

C'est la directive ServerName qui dit à Apache quel nom associer à tel ou tel hôte virtuel. Il y a aussi ServerAlias, bien sûr, qui permet de définir plusieurs noms pour un seul hôte virtuel.

http://httpd.apache.org/docs/2.4/fr/mod … servername


4/ /var/www/html

Il n'y a aucune obligation à mettre ses sites dans /var/www/html. D'ailleurs la norme veut qu'ils soient sous /srv : http://fr.wikipedia.org/wiki/Filesystem … 9pertoires

La seule chose, c'est que la configuration par défaut d'Apache 2.4 sur Debian (et donc Ubuntu) limite l'accès aux répertoires en-dehors de /var/www/html.

Avant, il suffisait de mettre un virtualhost à la racine pour rendre tout le système disponible à n'importe qui, ou encore de créer des liens symboliques, ce genre de choses assez simples. Vu que les néophytes appliquent des tutoriels sans rien y comprendre (et que certaines sociétés placent des néophytes à des postes comme "administrateur système", ça c'est un autre problème), il est arrivé que des données sensibles soient divulguées à cause d'une mauvaise configuration.

Maintenant, quand on fait une configuration qui donne accès à des fichiers situés en-dehors de /var/www/html, cela ne fonctionne pas par défaut : il faut explicitement configurer le virtualhost pour que les visiteurs aient le droit d'accéder à ces fichiers. Ça rend la configuration d'un virtualhost plus compliquée mais ça rend la configuration par défaut plus simple.


5/ apache2.conf ou httpd.conf

On ne touche pas à ce fichier. Sauf cas exceptionnels.


6/ 000_default.conf

L'idéal est de désactiver le virtualhost par défaut : sur un serveur bien configuré, il n'y a pas de défaut.


7/ requête avec un nom inconnu

Quand on lui demande un nom qu'il ne connaît pas, Apache retourne le premier virtualhost qu'il a rencontré dans sa configuration. Dans le cas où on laisse 000_default.conf activé, il retourne celui-ci, tout simplement car "000_" va se placer avant tous les sites que tu définis. Cela dit, si tu crées un fichier de configuration appelé "0000_machintruc.conf", c'est lui qui sera pris en compte comme hôte virtuel "par défaut".

L'idéal est :
- soit de mettre en tout premier le site que l'on veut voir par défaut si n'importe quel nom est demandé (ou si l'adresse IP est demandée, tout simplement) ;
- soit de créer un hôte virtuel qu'on mettra grosso modo à la place de 000_default et qu'on fera pointer vers une simple page web qui dirait « y'a rien ici, tu t'es trompé de nom d'hôte mon gars ».


Voilà, je crois que j'ai précisé tout ce que je voyais à préciser. Si tu as besoin d'autres détails, n'hésite pas à demander.

Hors ligne

#8 Le 16/02/2015, à 18:35

Vorona

Re : [RÉSOLU] Apache et 14.04 : accès au bon répertoire d'un VirtualHost

Merci beaucoup Tiramiseb.

OK assez de longueurs et de confusion, c'est très juste. Je vais être concis - d'abord expérimenter, puis donner le retour.

Au passage quand je parlais de la doc c'était bien ça mais la 2.4.

C'est un sujet que je trouve beaucoup plus difficile et moins accessible sur le web que ce dont j'ai l'habitude, sans doute par manque de bases spécifiques dans ce domaine. Si tu n'en as pas un minimum, la doc Apache tu en zappes les 3/4. Je ne suis pas totalement dépourvu (niveau master info 1) mais ça ne suffit pas et surfer sur le web sur ce domaine c'est comme traverser un banc de nuages en avion sans instruments. Pire même parce que la tour de contrôle te donne des infos hasardeuses et que les cartes ne sont pas à jour.

A très bientôt et franchement désolé de t'avoir (presque) découragé - tu as quand même écrit un post solide dont je vais de suite m'inspirer.

Dernière modification par Vorona (Le 16/02/2015, à 19:04)

Hors ligne

#9 Le 16/02/2015, à 20:53

Vorona

Re : [RÉSOLU] Apache et 14.04 : accès au bon répertoire d'un VirtualHost

Bon, a priori je dois dire qu'en te suivant à la lettre, tout a l'air de marcher très bien.

D'un autre côté je ne comprends plus ce qui n'allait pas !!! C'est d'autant plus mystérieux que j'y ai passé du temps et que je n'ai pas percuté en lisant ton message, genre "bon sang mais c'est bien sûr ! " (Ouais c'est un peu d'une autre époque ça wink )

Pour l'instant j'ai fait des tests avec des sources dans /var/www/html/ comprenant simplement un répertoire et un ficher d'index simple, genre "la page demandée n'existe pas" pour 000_default que j'ai gardé, et sinon "page machin". Je n'ai pas encore franchi l'étape des liens symboliques. Effectivement les hôtes virtuels sont déclarés avec la syntaxe

<VirtualHost *:80>

c'est ce à quoi je voulais arriver.

Maintenant j'ai toujours le warning :

 * Restarting web server apache2
AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1. Set the 'ServerName' directive globally to suppress this message

Si je ne change pas apache2.conf comment le désactiver ???

Merci encore. Je vérifie à fond avant d'enlever le '?' de 'RÉSOLU'.

Dernière modification par Vorona (Le 16/02/2015, à 20:56)

Hors ligne

#10 Le 16/02/2015, à 21:57

tiramiseb

Re : [RÉSOLU] Apache et 14.04 : accès au bon répertoire d'un VirtualHost

Si je ne change pas apache2.conf comment le désactiver ???

Tu crées un fichier dans /etc/apache2/conf-available et tu l'actives avec la commande a2enconf smile

Hors ligne

#11 Le 17/02/2015, à 13:28

Vorona

Re : [RÉSOLU] Apache et 14.04 : accès au bon répertoire d'un VirtualHost

Ah oui bien sûr. J'ai juste mis une ligne dans ce fichier de conf :

ServerName <mamachine>

Pour l'ensemble encore merci !!! smile. J'ai réussi à appliquer tes directives, et j'ai compris aussi à quoi servait /etc/hosts lors de la recherche d'un site. Tout marche bien avec :

  • le fichier original apache2.conf (sauf que je ne sais plus s'il fallait laisser la ligne suivante commentée, je crois qu'elle l'était, il me semble toutefois plus logique de l'activer )

 ServerRoot "/etc/apache2"
  • l'hôte par défaut suivant :

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

où /var/www/html/default contient juste une page de message de page non trouvée (là je n'ai pas vraiment suivi tes conseils, j'avoue, mais je ne savais pas trop comment faire autrement ... pour faire un "serveur bien configuré" il me faudra encore de la formation ... ) ;

  • les autres hôtes sur ce modèle :

<VirtualHost *:80>
	ServerName monsite.com
	ServerAlias *.monsite.com
	ServerAdmin webmaster@monsite.com
	DocumentRoot /var/www/html/monsite.com
	ErrorLog ${APACHE_LOG_DIR}/error.log
	CustomLog ${APACHE_LOG_DIR}/access.log combined
	<Directory /home/erik/Developpement/Web/monsite.com>
		Options Indexes FollowSymLinks
		AllowOverride None
		Allow from all
		Require all granted
	</Directory>
</VirtualHost>

où /var/www/html/monsite.com est un lien symbolique vers /home/erik/Developpement/Web/monsite.com qui est en 775 et appartient à www-data.

Finalement c'est simple ... lol  Je suppose que dans mes recherches je n'avais pas dû changer une chose à la fois et qu'il y en avait toujours au moins une qui était incorrecte - en plus l'utilisation par Firefox de son cache à dû m'embrouiller aussi ...

Cette config comporte-t-telle des failles de sécurité ?

Dernière modification par Vorona (Le 17/02/2015, à 15:21)

Hors ligne

#12 Le 17/02/2015, à 19:10

tiramiseb

Re : [RÉSOLU] Apache et 14.04 : accès au bon répertoire d'un VirtualHost

Cette config comporte-t-telle des failles de sécurité ?

Difficile de répondre comme ça.

Ça dépend de plein de paramètres, dont de nombreuses choses que tu n'as pas montrées, par exemple le code du site ou les droits sur les fichiers...

Hors ligne

#13 Le 18/02/2015, à 10:10

Vorona

Re : [RÉSOLU] Apache et 14.04 : accès au bon répertoire d'un VirtualHost

Les droits sur les fichiers comme je le disais sont en 775 pour /home/erik/.../monsite, avec www-data comme user et group (erik est membre de www-data), /var/www est root en 755, sauf les liens qui sont créés en 777.

Après pour tout ce qui est code (php html sql js ...) je suis bien conscient qu'il y a plein d'autres risques qu'on ne peut pas résumer dans un message de forum.

J'ai déjà beaucoup appris avec vos réponses.

Dernière modification par Vorona (Le 18/02/2015, à 10:11)

Hors ligne

#14 Le 18/02/2015, à 10:21

tiramiseb

Re : [RÉSOLU] Apache et 14.04 : accès au bon répertoire d'un VirtualHost

avec www-data comme user et group

Donc si quelqu'un exploite une faille d'un code PHP, il est susceptible de modifier tous ces fichiers.

Le serveur web doit avoir un minimum de droits...
S'il n'a pas à modifier des fichiers, il n'a pas à en être propriétaire.

Hors ligne

#15 Le 18/02/2015, à 11:36

Vorona

Re : [RÉSOLU] Apache et 14.04 : accès au bon répertoire d'un VirtualHost

Ah oui ... bonjour les pirates, prenez mon bateau et toute la flotte avec ! hmm

En fait j'ai allègrement étendu au site que j'essaie de développer des droits formatés pour un site d'apprentissage php, fourni par un prof pour être installé en local, où on peut tester du code ce qui suppose de créer un fichier. Je vais rectifier ça !!!

Merci encore.

Hors ligne