relecture

This commit is contained in:
gcolpart 2016-10-10 22:39:10 +02:00
parent 419ca34149
commit a82bc42b1f

View file

@ -9,7 +9,7 @@ Apache est le serveur [HTTP](HowtoHTTP) le plus utilisé sur le web depuis 1996.
## Installation
Nous utilisons [Apache-ITK](http://mpm-itk.sesse.net/) depuis des années en production sur de nombreux serveurs critiques. Apache-ITK permet de préciser pour chaque VirtualHost un utilisateur, un groupe et une option *MaxClients* spécifiques, ce qui est utile pour la sécurité d'un serveur multi-sites.
Nous utilisons la version [Apache-ITK](http://mpm-itk.sesse.net/) depuis des années en production sur de nombreux serveurs critiques. Apache-ITK permet de préciser pour chaque VirtualHost un utilisateur, un groupe et une option *MaxClients* spécifiques, ce qui est utile pour la sécurité d'un serveur multi-sites.
~~~
# apt install apache2-mpm-itk libapache2-mod-evasive apachetop libwww-perl
@ -30,7 +30,7 @@ Fichiers de configuration :
`-- sites-enabled
`-- *.conf
Activation des modules suivants :
Nous activons toujours les modules suivants :
~~~
# a2enmod rewrite expires headers rewrite cgi
@ -55,11 +55,13 @@ MaxRequestsPerChild 0
</Directory>
~~~
que l'on active à l'installation via la commande :
~~~
# a2enconf z_evolix.conf
~~~
Le fichier `/etc/apache2/ipaddr_whitelist.conf` contient les adresses IP privilégiées :
Le fichier `/etc/apache2/ipaddr_whitelist.conf` centralise les adresses IP privilégiées, on peut ainsi utiliser `Include ipaddr_whitelist.conf` à différents endroits dans la configuration d'Apache sans dupliquer ces adresses :
~~~{.apache}
Allow from 192.0.2.42
@ -101,7 +103,7 @@ Exemple d'un VirtualHost basé sur un nom de domaine via `/etc/apache2/sites-ava
require valid-user
Deny from all
Include /etc/apache2/ipaddr_whitelist.conf
Include ipaddr_whitelist.conf
Allow from 192.0.2.43
Satisfy any
</Directory>
@ -125,6 +127,7 @@ Exemple d'un VirtualHost basé sur un nom de domaine via `/etc/apache2/sites-ava
~~~
# adduser example
# adduser --ingroup example www-example
# mkdir /home/example/{www,log,awstats} && chown example: /home/example/{www,log,awstats}
# a2ensite example
~~~
@ -190,7 +193,7 @@ La configuration d'un VirtualHost pour HTTPS pourra ainsi ressembler à :
</VirtualHost>
~~~
Pour une configuration avancée des paramètres SSL : <http://trac.evolix.net/infogerance/wiki/HowtoSSL#AvecApache>
Pour une configuration avancée des paramètres SSL, voir <http://trac.evolix.net/infogerance/wiki/HowtoSSL#AvecApache>
## Configuration avancée
@ -200,7 +203,7 @@ La compression des fichiers texte/Javascript/CSS/RSS en GZIP se fait désormais
### mod_proxy_http
<https://httpd.apache.org/docs/2.4/mod/mod_proxy.html>
Le module [proxy](https://httpd.apache.org/docs/2.4/mod/mod_proxy.html) permet d'utiliser Apache en tant que proxy, notamment reverse-proxy HTTP :
~~~
# a2enmod proxy_http
@ -214,16 +217,24 @@ ProxyPass /foo http://127.0.0.1:8080/bar
ProxyPassReverse /foo http://127.0.0.1:8080/bar
~~~
Exemple avec un service HTTP distant (pratique pour une migration immédiate d'un serveur vers un autre) :
~~~{.apache}
ProxyPreserveHost On
ProxyPass / http://192.0.2.17/
ProxyPassReverse / http://192.0.2.17/
~~~
### mod_rpaf / mod_remoteip
**mod_remoteip** (**mod_rpaf** en Wheezy) permet d'utiliser l'adresse IP dans l'entête *X-Forwarded-For* pour les logs Apache et directives **mod_access** (Allow/Deny From).
Le module [mod_remoteip](https://httpd.apache.org/docs/2.4/mod/mod_remoteip.html) (**mod_rpaf** en Wheezy) permet d'utiliser la 1ère adresse IP située dans un entête HTTP type *X-Forwarded-For* pour les logs Apache et directives **mod_access** (Allow/Deny From).
Voici un exemple d'utilisation en Wheezy :
Voici un exemple d'utilisation en Wheezy pour un reverse-proxy avec l'adresse IP 192.0.2.10 :
~~~
# aptitude install libapache2-mod-rpaf
# cat /etc/apache2/mods-enabled/rpaf.conf
<IfModule mod_rpaf-2.0.c>
<IfModule rpaf_module>
RPAFenable On
RPAFsethostname On
#RPAFheader X-Forwarded-For
@ -231,21 +242,17 @@ RPAFproxy_ips 127.0.0.1 192.0.2.10
</IfModule>
~~~
Note 1 : Attention, bien modifier la directive `IfModule?` qui est incorrecte dans le paquet : `IfModule? mod_rpaf.c``IfModule? mod_rpaf-2.0.c`.
Note 2 : bien mettre l'IP du reverse-proxy dans `RPAFproxy_ips`
*Note :* bien mettre l'IP du reverse-proxy dans `RPAFproxy_ips`
### mod_xsendfile
Le module **xsendfile** permet de rediriger l'envoi d'un fichier vers Apache via un Header HTTP, notamment utilisé pour servir des fichiers via Apache tout en permettant de gérer le contrôle d'accès via une application web.
Le module [xsendfile](https://tn123.org/mod_xsendfile/) permet de rediriger l'envoi d'un fichier vers Apache via un Header HTTP, notamment utilisé pour servir des fichiers via Apache tout en permettant de gérer le contrôle d'accès via une application web.
~~~
# aptitude install libapache2-mod-xsendfile
# a2enmod xsendfile
# apt install libapache2-mod-xsendfile
~~~
Pour autoriser son utilisation via .htaccess, on ajoute `Options` à `AllowOverride`.
Pour autoriser son utilisation via *.htaccess*, on ajoute `Options` à `AllowOverride`.
## Authentification HTTP
@ -387,13 +394,17 @@ Pour une configuration avancée, on ajuste l'utilisation du jeu de règles *mods
## Awstats
`SetEnv AWSTATS_FORCE_CONFIG example`
[AWStats](http://www.awstats.org/) est un outil pour générer des statistiques en fonction d'un fichier de logs.
Voir http://trac.evolix.net/infogerance/wiki/HowtoLAMP/AwStats
*Note :* une configuration AWStats peut être forcée au sein d'un VirtualHost grâce à la directive `SetEnv AWSTATS_FORCE_CONFIG example`
## Monitoring
### log2mail
Pour être alerté en cas de *Segmentation fault*, on ajoute la configuration suivante au logiciel [log2mail]() :
Pour être alerté en cas de *Segmentation fault*, on ajoute la configuration suivante au logiciel [log2mail](http://trac.evolix.net/infogerance/wiki/HowtoLog2mail) :
~~~
file = /var/log/apache2/error.log
@ -409,37 +420,32 @@ file = /var/log/apache2/error.log
### apachetop
~~~
L'indispensable **apachetop** permet de surveiller en direct l'activité d'Apache via un fichier d'access_log :
~~~{.bash}
$ apachetop -f access.log -T 3600
~~~
### server-status
L'activation du server-status est utile pour une observation manuelle ou automatique.
L'activation du *server-status* est utile pour une observation manuelle ou automatique.
~~~
~~~{.apache}
<IfModule mod_status.c>
ExtendedStatus On
<Location /server-status>
<Location /server-status-XXXX>
SetHandler server-status
Deny from all
Include ...
Include ipaddr_whitelist.conf
Allow from 192.0.2.43
Allow from 127.0.0.1
</Location>
</IfModule>
~~~
### Munin
Fichier `/etc/munin/plugin-conf.d/munin-node` :
~~~
[apache_*]
env.url http://127.0.0.1:%d/server-status-XXXX?auto
env.port 80
~~~
En parallèle, on s'assure que les plugins pour Apache sont bien activés. Si non, on fera :
Pour activer les plugins Apache pour Munin :
~~~
# cd /etc/munin/plugins
@ -448,13 +454,21 @@ En parallèle, on s'assure que les plugins pour Apache sont bien activés. Si no
# ln -s /usr/share/munin/plugins/apache_volume
~~~
Une fois Munin et Apache redémarrés, les graphes devraient commencer à se tracer. On pourra tester sans attendre le bon fonctionnement via la commande :
Les plugins Apache pour Munin se base *server-status*, on configure ainsi via le fichier `/etc/munin/plugin-conf.d/munin-node` :
~~~
[apache_*]
env.url http://127.0.0.1:%d/server-status-XXXX?auto
env.port 80
~~~
Pour tester le bon fonctionnement des plugins Apache pour Munin :
~~~
# sudo -u munin munin-run apache_accesses
~~~
Ceci doit vous renvoyer une valeur du type accesses80.value 19372070. Si la commande vous renvoie U, vous avez un soucis d'accès à la page, vérifiez alors que vous avez bien ouvert les ports sur votre serveur Web en local.
Ceci doit vous renvoyer une valeur du type accesses80.value 19372070. Si la commande vous renvoie U, vous avez un soucis d'accès à la page *server-status*, à vérifier via `GET http://127.0.0.1:%d/server-status-XXXX?auto`.
## FAQ