Contenu | Rechercher | Menus

Annonce

DVD, clés USB et t-shirts Ubuntu-fr disponibles sur la boutique En Vente Libre

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 17/12/2015, à 15:27

Brebiou

Configuration Apache2 avec des directives dans le 000-default.conf

Bonjour à tous,

D'habitude, en fouillant le forum et le net, je me débrouille, mais la je sèche complètement, donc je viens poser ma question.

J'ai installé la dernière version d'Ubuntu Server (14.04) en tant qu'invité sur un hôte Windows 7 à travers Virtualbox.
Je me suis servi de tasksel pour installer lamp et un systeme de mail. J'ai donc Apache2 v2.4.7.
Connexion SSH active en LAN/WAN, je me suis attaqué aux définitions de mes répertoires pour poser mes dev d'un site qui est en productions et d'un site à venir.
L'arborescence souhaité est comme ceci:

  • /var/www/html (vide)

  • /var/www/site1

  • /var/www/site2

Depuis ce tuto, j'ai touché du bout du doigts les directives, mais j'aime pas trop les copier/coller sans comprendre, donc j'ai été sur le site d'Apache, et la je me suis noyé dans les options. Pourtant c'est en français smile

Aujourd'hui mon fichier 000-default.conf est comme ceci:

<VirtualHost *:80>

	ServerAdmin webmaster@localhost
	DocumentRoot /var/www

	<Directory /var/www/>
		Options Indexes FollowSymLinks MultiViews
		AllowOverride None
	</Directory>

# Dossier pour site1
	<Directory /var/www/site1>
		Options Indexes FollowSymLinks MultiViews
		AllowOverride None
	</Directory>

# Dossier pour site1

	<Directory /var/www/site2>
		Options Indexes FollowSymLinks MultiViews
		AllowOverride None
	</Directory>

</VirtualHost>

C'est ma base "saine" avant de définir mes directives.

En allant sur http://localhost/, j'affiche l'arborescence du dossier www, chose que je ne veux pas, mais en utilisant ce code issu du tuto

<Directory /var/www/>
	Options Indexes FollowSymLinks MultiViews
	AllowOverride None
	<RequireAny>
		Require ip 127.0.0.1
		Require ip 192.168.1
	</RequireAny>
</Directory>

Les sous-répertoires de www deviennent aussi inaccessible, ce qui est logique quand à la directive appliquée.

Donc je résume mes interrogations, car je m'éparpille:

  • Quel intérêt de bloquer le dossier www comme le tuto?

  • Je souhaite que le dossier www ne soit pas accessible directement, mais que mes autres dossiers le soit, quelles directives dois je appliquer?

  • Y a t il des différences de chemin, de fichiers de conf et de services entre les différentes distribution Linux qui supporte Apache?

Merci d'avance de votre lecture et d’éventuelles réponses.

Hors ligne

#2 Le 18/12/2015, à 12:27

adgenodux

Re : Configuration Apache2 avec des directives dans le 000-default.conf

Salut,

Plusieurs choses m'interpellent dans ta description.

Déjà, depuis apache 2.4, le répertoire www est désormais /var/www/html... donc pour tes différents sites, si tu veux qu'ils soient dans le répertoire www, l'arborescence devrait déjà être du type

/var/www/html(vide)
/var/www/html/site1
/var/www/html/site2

Maintenant tu peux très bien placer tes sites ailleurs, dans le répertoire Home par ex.

Ensuite, moi je ferais des virtual hosts pour chaque site, je n'utiliserais pas 000-default.conf, je l'effacerais même car si tu n'en as pas particulièrement besoin, il peut être source de soucis. Donc tu en fais une copie vers site1.conf et site2.conf et tu les configures séparément, même s'ils ont à peu de chose près la même config.

Voici par ex un de mes fichiers de config qui fonctionne:

<VirtualHost *:80>
        ServerAdmin monmail@presta.tld
        ServerName monserveur

        DocumentRoot /var/www/html
        
	<Directory />
                Options FollowSymLinks
                AllowOverride All
        </Directory>
		
        <Directory /var/www/html>
                Options Indexes FollowSymLinks MultiViews
                AllowOverride All
                require all granted
         </Directory>

        ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
        
	<Directory "/usr/lib/cgi-bin">
                AllowOverride None
                Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
                require all granted
        </Directory>

        ErrorLog /var/log/apache2/error.log

        # Possible values include: debug, info, notice, warn, error, crit,
        # alert, emerg.
        LogLevel warn

        CustomLog /var/log/apache2/access.log combined

		Alias /doc/ "/usr/share/doc/"
		
		<Directory "/usr/share/doc/">
			Options Indexes MultiViews FollowSymLinks
			AllowOverride None
			require ip 127.0.0.0/255.0.0.0 ::1/128
		</Directory>

</VirtualHost>

<VirtualHost *:443>
        ServerAdmin monmail@presta.tld
        ServerName monserveur

        DocumentRoot /var/www/html
		
        <Directory />
                Options FollowSymLinks
                AllowOverride All
        </Directory>
        
	<Directory /var/www/html>
                Options Indexes FollowSymLinks MultiViews
                AllowOverride None
                require all granted
        </Directory>

        ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
        
	<Directory "/usr/lib/cgi-bin">
                AllowOverride None
                Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
                require all granted
        </Directory>

        ErrorLog /var/log/apache2/error.log

        # Possible values include: debug, info, notice, warn, error, crit,
        # alert, emerg.
        LogLevel warn

        CustomLog /var/log/apache2/access.log combined

		Alias /doc/ "/usr/share/doc/"
		
		<Directory "/usr/share/doc/">
			Options Indexes MultiViews FollowSymLinks
			AllowOverride None
			require ip 127.0.0.0/255.0.0.0 ::1/128
		</Directory>

		<Location /server-info>
			SetHandler server-info
			require ip 127.0.0.1 192.168.1.5 192.168.1.51
		</Location>

		<Location /server-status>
			SetHandler server-status
			require ip 127.0.0.1 192.168.1.5 192.168.1.51
		</Location>

		SSLEngine on
		SSLCertificateFile /etc/apache2/ssl/apache.pem

</VirtualHost>

Naturellement c'est une config qui m'est propre, suivant certaines préférences persos, chacun a un peu sa config, comme les sauces spaghetti big_smile Donc il est aussi configuré pour un accès en https (VirtualHost *:443), tu n'es pas obligé de le faire, cela dépend si tu dois sécuriser des transactions par ex mais il faut alors un certificat.

Au départ de cette config qui est le site principal, je peux très bien avoir d'autres sites, qu'ils soient dans un sous-répertoire de www ou ailleurs. Comme je n'utilise pas de service DNS, je passe par le fichier hosts (/etc/hosts) pour déclarer mes autres sites et je crée des liens symboliques (commande ln -s) dans /var/www/html et qui renvoient vers les répertoires physiques où se trouvent les autres sites et j'ai donc des configs distinctes pour chaque site dans /etc/apache2/sites-available.

Attention toutefois que pour que le système suive les liens symboliques quand une requête arrive dans le www, il faut configurer la directive Options FollowSymLinks dans le virtualhost avec la déclaration suivante :

<Directory />
       Options FollowSymLinks
       AllowOverride All
</Directory>

Les directives suivantes :

<Location /server-info>
        SetHandler server-info
	require ip 127.0.0.1 192.168.1.5 192.168.1.51
</Location>

<Location /server-status>
	SetHandler server-status
	require ip 127.0.0.1 192.168.1.5 192.168.1.51
</Location>

... servent à accéder à des infos du serveur Apache. Cela nécessite de configurer et d'activer les modules /etc/apache2/mods-available/info.conf et /etc/apache2/mods-available/status.conf. Voici par ex mon status.conf :

<IfModule mod_status.c>
        # Allow server status reports generated by mod_status,
        # with the URL of http://servername/server-status
        # Uncomment and change the "192.0.2.0/24" to allow access from other hosts.

        <Location /server-status>
                SetHandler server-status
                Require ip 192.168.1.51 127.0.0.1 192.168.1.5
        </Location>

        # Keep track of extended status information for each request
        ExtendedStatus On

        # Determine if mod_status displays the first 63 characters of a request or
        # the last 63, assuming the request itself is greater than 63 chars.
        # Default: Off
        #SeeRequestTail On


        <IfModule mod_proxy.c>
                # Show Proxy LoadBalancer status in mod_status
                ProxyStatus On
        </IfModule>


</IfModule>

Sinon, quand tu obtiens la liste des fichiers du répertoire au lieu d'une page web, c'est que le répertoire que tu visites n'a tout simplement pas de fichier index.html. Ce qui n'est pas logique si c'est ta page d'entrée du site, sauf si tu as un index.php à la place. Maintenant en principe on a toujours un fichier index.html dans les répertoires potentiellement accessibles depuis le web, même si ces répertoires ne contiennent pas nécessairement des pages à afficher. La présence de ce fichier, même qu'il est vide, permet d'éviter l'affichage du contenu du répertoire quand il n'y a pas de page web à afficher, ça t'affiche alors une page blanche.

Enfin, dans le code que tu a pris du tuto :

<Directory /var/www/>
	Options Indexes FollowSymLinks MultiViews
	AllowOverride None
	<RequireAny>
		Require ip 127.0.0.1
		Require ip 192.168.1
	</RequireAny>
</Directory>

.. sauf erreur, la directive Require en l'état ne permettra l'accès que depuis le serveur lui-même ou d'un poste du réseau local. Il me semble qu'il faudrait plutôt mettre

<Directory /var/www/html>
	Options Indexes FollowSymLinks MultiViews
	AllowOverride None
	Require all granted
</Directory>

Voilà ce que je dirais à ce stade, je ne suis pas spécialiste mais j'arrive à faire tourner mes serveurs donc je ne dois pas être trop loin d'une vérité acceptable mais d'autres avec davantage d'expérience que moi peuvent naturellement compléter/corriger, j'ai encore à apprendre sur le sujet big_smile

Cordialement...

Hors ligne

#3 Le 18/12/2015, à 12:50

tiramiseb

Re : Configuration Apache2 avec des directives dans le 000-default.conf

Déjà, depuis apache 2.4, le répertoire www est désormais /var/www/html... donc pour tes différents sites, si tu veux qu'ils soient dans le répertoire www, l'arborescence devrait déjà être du type

J'ajouterais que, depuis 2004, on doit mettre les sites sous /srv (arborescence à notre convenance).
Les répertoires /var/www ou /var/www/html, ce sont des répertoires par défaut, éventuellement utilisables par des procédures automatisées mais à éviter manuellement.

adgenodux, tes fichiers de config me semblent bien compliqués.

Voici un exemple simple qui devrait fonctionner, qui est propre et correctement sécurisé :

<VirtualHost *:80>
        ServerAdmin webmaster@example.com
        ServerName www.example.com
        ServerAlias example.com
        DocumentRoot /srv/www.example.com
        <Directory /srv/www.example.com>
                AllowOverride None
                require all granted
         </Directory>
        ErrorLog /var/log/apache2/www.example.com/error.log
        LogLevel warn
        CustomLog /var/log/apache2/www.example.com/access.log combined
</VirtualHost>

Et si on veut un hôte par défaut qui n'affiche, on peut mettre dans le fichier "000-default.conf" par exemple :

<VirtualHost *:80>
        ServerAdmin webmaster@example.com
        DocumentRoot /srv/www-default
        <Directory /srv/www-default>
                AllowOverride None
                require all granted
         </Directory>
        ErrorLog /var/log/apache2/error.log
        LogLevel warn
        CustomLog /var/log/apache2/access.log combined
</VirtualHost>

Hors ligne

#4 Le 18/12/2015, à 12:51

tiramiseb

Re : Configuration Apache2 avec des directives dans le 000-default.conf

La présence de ce fichier, même qu'il est vide, permet d'éviter l'affichage du contenu du répertoire quand il n'y a pas de page web à afficher

Ouais enfin pour éviter l'affichage du contenu quand il n'y a pas de fichier index, il vaut mieux désactiver l'option Indexes...

Hors ligne

#5 Le 20/12/2015, à 16:49

Brebiou

Re : Configuration Apache2 avec des directives dans le 000-default.conf

adgenodux a écrit :

Salut,

Plusieurs choses m'interpellent dans ta description.

Déjà, depuis apache 2.4, le répertoire www est désormais /var/www/html... donc pour tes différents sites, si tu veux qu'ils soient dans le répertoire www, l'arborescence devrait déjà être du type

/var/www/html(vide)
/var/www/html/site1
/var/www/html/site2

Maintenant tu peux très bien placer tes sites ailleurs, dans le répertoire Home par ex.

tiramiseb a écrit :

J'ajouterais que, depuis 2004, on doit mettre les sites sous /srv (arborescence à notre convenance).
Les répertoires /var/www ou /var/www/html, ce sont des répertoires par défaut, éventuellement utilisables par des procédures automatisées mais à éviter manuellement.

Je ne voulais pas me servir du dossier html, encore moins du dossier home, ce n'est pas dans mes habitudes de placer mes dev dans les dossiers personnels.

Je vais me servir de /srv, ça répond bien au besoin.

tiramiseb a écrit :

Voici un exemple simple qui devrait fonctionner, qui est propre et correctement sécurisé :

<VirtualHost *:80>
        ServerAdmin webmaster@example.com
        ServerName www.example.com
        ServerAlias example.com
        DocumentRoot /srv/www.example.com
        <Directory /srv/www.example.com>
                AllowOverride None
                require all granted
         </Directory>
        ErrorLog /var/log/apache2/www.example.com/error.log
        LogLevel warn
        CustomLog /var/log/apache2/www.example.com/access.log combined
</VirtualHost>

Je saisis mieux les directives depuis que je me suis farçi une lecture intensive du site Apache smile, j'en étais arrivé à quasi la même chose, ça me conforte de voir que je ne me suis pas infligé ça pour rien.

Par contre, quelle adresse dois taper en local pour me servir du "ServerName"? Faut il que je modifie le fichier host pour ne pas aller sur Internet chercher www.example.com??

Merci en tout cas de vos réponses smile

Hors ligne

#6 Le 20/12/2015, à 18:09

tiramiseb

Re : Configuration Apache2 avec des directives dans le 000-default.conf

Oui il faut utiliser le fichier hosts.

Hors ligne

#7 Le 21/12/2015, à 11:48

adgenodux

Re : Configuration Apache2 avec des directives dans le 000-default.conf

@ Tiramiseb: Merci pour les précisions dont je prends bonne note wink

@ Brebiou:

Comme le dit Tiramiseb, il faut utiliser le fichier /etc/hosts pour déclarer tes sites. le mien se présente comme suit:

127.0.0.1   localhost.localdomain localhost monserveur
127.0.0.1   site1
127.0.0.1   site2
127.0.0.1   site3

# The following lines are desirable for IPv6 capable hosts
::1     localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
ff02::3 ip6-allhosts

Ainsi, quand je veux accéder depuis mon navigateur, je tape l'adresse par ex comme ceci (avec ou sans le http):

http://monserveur/site1/index.html/
ou
monserveur/site2/index.php/

ou par ex avec l'adr ip de mon serveur
192.168.1.99/site3/index.php/

Pour que le navigateur le retrouve, il faut aussi déclarer monserveur dans le fichier hosts dans C:\Windows\System32\drivers\etc (machine client, éditer avec le Bloc Note "en tant qu'admin")

# Copyright (c) 1993-2009 Microsoft Corp.
#
# This is a sample HOSTS file used by Microsoft TCP/IP for Windows.
#
# This file contains the mappings of IP addresses to host names. Each
# entry should be kept on an individual line. The IP address should
# be placed in the first column followed by the corresponding host name.
# The IP address and the host name should be separated by at least one
# space.
#
# Additionally, comments (such as these) may be inserted on individual
# lines or following the machine name denoted by a '#' symbol.
#
# For example:
#
#      102.54.94.97     rhino.acme.com          # source server
#       38.25.63.10     x.acme.com              # x client host

# localhost name resolution is handled within DNS itself.
#	127.0.0.1       localhost
#	::1             localhost

192.168.1.99   monserveur
192.168.1.99	site1
192.168.1.99	site2
192.168.1.99	site3

En y déclarant aussi tes sites, tu pourras y accéder via l'adresse (plus courte):

http://site1
http://site2
etc

Dernière modification par adgenodux (Le 21/12/2015, à 12:20)

Hors ligne

#8 Le 21/12/2015, à 13:51

tiramiseb

Re : Configuration Apache2 avec des directives dans le 000-default.conf

Bien évidemment, je parle du fichier hosts du poste qu'on utilise pour accéder aux sites : le /etc/hosts du serveur, on s'en fout...

Hors ligne

#9 Le 22/12/2015, à 17:05

Brebiou

Re : Configuration Apache2 avec des directives dans le 000-default.conf

Merci à vous deux pour votre aide, j'ai enfin quelque chose de fonctionnel!

Je dis enfin parce qu'il m'a fallu un moment pour me rendre compte que la commande vu un peu partout sur le net:

service apache2 reload

ne prends pas en compte mes modifs des fichiers de configuration.

Pour cela, il m'a fallu redémarrer le serveur Apache avec

sudo service apache2 restart

Voila, c'est résolu wink

Hors ligne

#10 Le 22/12/2015, à 17:07

tiramiseb

Re : Configuration Apache2 avec des directives dans le 000-default.conf

Pourtant un reload devrait suffire...

Hors ligne