#1 Le 17/12/2015, à 14: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
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, à 11: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 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
Cordialement...
Hors ligne
#3 Le 18/12/2015, à 11: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>
Sébastien Maccagnoni - https://www.maccagnoni.eu - https://www.domotego.com
Hors ligne
#4 Le 18/12/2015, à 11: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...
Sébastien Maccagnoni - https://www.maccagnoni.eu - https://www.domotego.com
Hors ligne
#5 Le 20/12/2015, à 15:49
- Brebiou
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.
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.
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 , 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
Hors ligne
#6 Le 20/12/2015, à 17:09
- tiramiseb
Re : Configuration Apache2 avec des directives dans le 000-default.conf
Oui il faut utiliser le fichier hosts.
Sébastien Maccagnoni - https://www.maccagnoni.eu - https://www.domotego.com
Hors ligne
#7 Le 21/12/2015, à 10:48
- adgenodux
Re : Configuration Apache2 avec des directives dans le 000-default.conf
@ Tiramiseb: Merci pour les précisions dont je prends bonne note
@ 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, à 11:20)
Hors ligne
#8 Le 21/12/2015, à 12: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...
Sébastien Maccagnoni - https://www.maccagnoni.eu - https://www.domotego.com
Hors ligne
#9 Le 22/12/2015, à 16: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
Hors ligne
#10 Le 22/12/2015, à 16:07
- tiramiseb
Re : Configuration Apache2 avec des directives dans le 000-default.conf
Pourtant un reload devrait suffire...
Sébastien Maccagnoni - https://www.maccagnoni.eu - https://www.domotego.com
Hors ligne