User Tools

Site Tools


informatique:logiciels:apache

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
informatique:logiciels:apache [2015/04/07 23:21] – [De l'utilisation d'apache2ctl] pteuinformatique:logiciels:apache [2020/11/02 17:57] (current) pteu
Line 1: Line 1:
-{{tag>informatique logiciel serveur web}} 
  
 ====== Apache ====== ====== Apache ======
  
-[[http://httpd.apache.org/|Apache]] est le plus répandu des serveur web ; c'est un serveur HTTP/HTTPS (avec mod_ssl) auquel on peut ajouter des modules pour étendre ses possibilités.+[[http://httpd.apache.org/|Apache]] est le plus répandu des serveurs web/HTTP dont les fonctionnalités sont extensibles grâce à un système de modules chargés au besoin.
  
-Les fichiers de configuration diffèrent selon la distribution Linux utilisée : sous Redhat le fichier de conf principal est **/etc/httpd/httpd.conf**, qui include le répertoire **/etc/httpd/conf.d/** qui contient les fichiers de configuration des modules. Le **DocumentRoot** par défaut (le répertoire qui contient les pages .html) est **/var/www/html**.+Les fichiers de configuration diffèrent selon la distribution Linux utilisée : sous Redhat-like le fichier de conf principal est **/etc/httpd/httpd.conf**, sous Debian-like il est sous **/etc/apache2/apache2.conf**. Le **DocumentRoot** par défaut (le répertoire qui contient les pages .html) est **/var/www/html**, les logs sont rangés, respectivement, dans **/var/log/httpd/*.log** ou **/var/log/apache2/*.log**.
  
-Les fichiers des logs sont situés dans le répertoire **/var/log/httpd/** : **error.log** qui contient les erreurs et **access.log** qui contient les traces de toutes les connexions des clients.+=====Configuration=====
  
-Pour connaitre les chemins des fichiers de conf sous Debian/Ubunturemplacez "httpd" par "apache" ou "apache2" !+Dans les versions les plus récentes d'Apache, on dépose les configurations de chaque site web dans un fichier dédié, rangé dans le dossier **site-available/** ; lorsqu'on souhaite activer ce site, on créé un lien symbolique de ce dernier dans **site-enabled/**. Ce lien peut être simplement créer via la commande **a2ensite <nom du fichier sans l'extension>**, par exemple ''a2ensite 000-default''
 + 
 +De même pour les modules, avec les dossiers **mods-available/** et **mods-enabled/**, et la commande **a2enmod <nom du module>**, et plus récemment des bouts de conf déposés dans **conf-available/** / **conf-enabled/** avec la commande a2enconf.
  
-=====Configuration===== 
  
 Exemple de directives de configuration commentées : Exemple de directives de configuration commentées :
Line 76: Line 76:
 </code> </code>
  
-Les droits d'accès sont définis principalement par les directives **Allow**, **Deny** et **Order**. Order permet de modifier l'ordre de traitement des 2 directives précédente ; voici la façon dont les vérifications sont traitées (source : [[http://httpd.apache.org/docs/2.2/mod/mod_authz_host.html|doc apache]]) :+<WRAP center round important 60%> 
 +Depuis la version 2.4 d'Apache il est recommandé d'utiliser la directive **Require**, [[http://httpd.apache.org/docs/2.4/howto/access.html#host|les directives allow, deny et order étant désormais obsolètes]]. Des exemples d'utilisation de Require sont listés dans la partie [[informatique:logiciels:apache#serveur_mandataire_mod_proxy|mod_proxy]]. 
 +</WRAP> 
 + 
 +<del>Les droits d'accès sont définis principalement par les directives **Allow**, **Deny** et **Order**.</del> Order permet de modifier l'ordre de traitement des 2 directives précédente ; voici la façon dont les vérifications sont traitées (source : [[http://httpd.apache.org/docs/2.2/mod/mod_authz_host.html|doc apache]]) :
  
 >Ordering is one of: >Ordering is one of:
Line 165: Line 169:
  
  
-===== mod ssl =====+=====Proxy / mod_proxy===== 
 + 
 +Ce module permet d'activer la fonctionnalité de serveur mandataire d'Apache. Il nécessite l'activation d'autres mod pour fonctionner correctement : 
 +  * proxy : fonctionnalités de base du serveur mandataire 
 +  * proxy_http : permet de gérer le protocole HTTP 
 +  * proxy_connect : permet de gérer les connexion SSL chiffrées avec la méthode CONNECT (simple redirection dans ce cas) 
 +  * cache et disk_cache : ajoute la fonctionnalité de cache 
 +  * headers : permet de manipuler les en-têtes 
 + 
 +Activer ceux qu'il faut en fonction des besoins ; dans mon cas : 
 +<code bash> 
 +a2enmod proxy proxy_http proxy_connect headers 
 +</code> 
 + 
 +Exemple de configuration commentée : 
 +<code bash> 
 +# ref : https://httpd.apache.org/docs/2.4/fr/mod/mod_proxy.html 
 +<IfModule mod_proxy.c> 
 + 
 +# active la fonctionnalité de mandataire direct 
 +# ne concerne pas les directives ProxyPass (reverse proxy, voir plus bas) 
 +ProxyRequests On 
 + 
 +<Proxy *> 
 +   AddDefaultCharset off 
 +# on refuse tout par défaut 
 +   Require all denied 
 +# restriction sur un domaine/nom d'hote 
 +# attention cela provoque une double requete DNS + inverse de la part du serveur 
 +#   Require host .rv 
 +# restriction au localhost (127/8, ::1, IP du serveur local) 
 +   Require local 
 +# restriction des IPs clientes au seul LAN 
 +   Require ip 192.168.1 
 +# NB : 
 +# - si des directives doivent être toutes validées (aucune négative et au moins une positive), 
 +#      on encadre par <RequireAll> ... </RequireAll> 
 +# - si au moins l'une doit être positive, on encadre par <RequireAny> 
 +# - si aucune ne doit retourner de résultat positif on utilise <RequireNone> 
 +</Proxy> 
 + 
 +# ajout automatique du suffixe aux noms d'hôte non qualifiés (redirection) 
 +ProxyDomain ".rv" 
 +# connexion sans mandataire 
 +NoProxy     "192.168.1.0/24" ".rv" 
 +# définit le proxy suivant pour toutes (*) les requêtes 
 +#ProxyRemote * http://next-mandataire:8080 
 +# ProxyRemote ftp ftp://proxy-ftp.exemaple.com:8080 
 +# ProxyRemoteMatch est identique à ceci près que le premier paramètre est une regexpr 
 + 
 +# Créer un "alias" vers un site distant (~mirroring) / mandataire inverse (reverse proxy) ou passerelle 
 +# ex : http://mon_proxy/pteu/ -> http://pteu.fr/ 
 +<Location "/pteu/"> 
 +   ProxyPass "http://pteu.fr/" 
 +</Location> 
 +# syntaxe alternative, moins performante si présente en grand nombre : 
 +#ProxyPass "/pteu/" "http://pteu.fr/" 
 + 
 +# Enable/disable the handling of HTTP/1.1 "Via:" headers. 
 +# ("Full" adds the server version; "Block" removes all outgoing Via: headers) 
 +# Set to one of: Off | On | Full | Block 
 +ProxyVia Off 
 + 
 +# définit le nombre max de proxys traversés / pour éviter les boucles infinies 
 +ProxyMaxForwards 5 
 +# timeout réponse d'un site destination; par défaut = Timeout = 60s 
 +#ProxyTimeout 60 
 +# préserve l'entête Host: de la requête cliente 
 +#ProxyPreserveHost Off 
 + 
 +
 +# Filtrages destinations 
 +
 +# bloquer via nom d'hote, de domaine ou tld 
 +# attention les DNS sont résolus au démarrage d'Apache, ce qui le ralentit si en grand nombre 
 +ProxyBlock ".sex" "example.com" 
 +</IfModule> 
 + 
 +<IfModule mod_proxy_connect.c> 
 +# controle utilisation de la methode CONNECT sur certains ports seulement 
 +# défaut : AllowCONNECT 443 563 
 +   AllowCONNECT 21 443 
 +</IfModule> 
 +</code> 
 + 
 +=====HTTPS / mod_ssl=====
  
 Pour activer le **mod SSL** qui permet le chiffrement des données : Pour activer le **mod SSL** qui permet le chiffrement des données :
Line 172: Line 261:
 </code> </code>
  
-=====Réécriture=====+=====mod_rewrite=====
  
-Le **mod_rewrite** permet de manipuler les requêtes entrantes.+Le **mod_rewrite** permet de manipuler les requêtes entrantes du serveur http.
  
-Activation du module apache :+Activation du module Apache :
 <code bash> <code bash>
 a2enmod rewrite a2enmod rewrite
 </code> </code>
  
-Mise ne place d'une redirection temporaire ajouter ces lignes dans le fichier de configuration du vhost (''/etc/apache2/site-enable/vhost_redir'' dans mon cas) :+====Syntaxe==== 
 + 
 +source : https://httpd.apache.org/docs/current/fr/mod/mod_rewrite.html#rewriterule 
 + 
 +Exemple de blocage de sites :
 <code bash> <code bash>
 +<IfModule mod_rewrite.c>
 +   RewriteCond %{HTTP_HOST} sex.com [NC,OR]
 +   RewriteCond %{HTTP_HOST} poker.fr [NC,OR]
 +   RewriteCond %{HTTP_HOST} drugs.com [NC] # pas de OR pour le dernière condition...
 +   RewriteRule ^(.*)$ - [F,L]
 +</IfModule>
 +</code>
 +On enchaine différentes conditions ''RewriteCond'' (avec le drapeau ''NC'' pour //NoCase//, insensible à la casse) suivis d'un //OU logique// (''OR''), puis on définit la règle ''RewriteRule'' qui contient l'action ''F'' (envoi une erreur **403 : Forbidden** au navigateur) et ''L'' (last) pour arrêter le processus de réécriture.
 +
 +Exemple de mise ne place d'une redirection (permanente=301 par défaut) : ajouter ces lignes dans le fichier de configuration du vhost (''/etc/apache2/site-enable/vhost_redir'' dans mon cas) :
 +<code bash>
 +<IfModule mod_rewrite.c>
 RewriteEngine On RewriteEngine On
-RewriteRule ^(.*)$ http://pteu.fr$1 [R=301,L]+RewriteRule ^(.*)$ http://pteu.fr$1 [R,L] 
 +</IfModule>
 </code> </code>
  
 **Syntaxe** : ''RewriteRule <regex> <url de redirection> [<paramètres>]'' **Syntaxe** : ''RewriteRule <regex> <url de redirection> [<paramètres>]''
  
-dans l'exemple ci-dessus, on redirige tout (''^(.*)$'') vers pteu.fr, avec un code HTTP ''301'' (qui correspond à une redirection temporaire). ''L'' indique que c'est la dernière règle à parcourir.+dans l'exemple ci-dessus, on redirige tout (''^(.*)$'') vers pteu.fr, avec un code HTTP ''301'' (qui correspond à une redirection permanente). On peut préciser une redirection temporaire (code=302avec : 
 +<code bash> 
 +[..] 
 +RewriteRule ^(.*)$ http://pteu.fr$1 [R=302,L
 +</code> 
 + 
 +====Variables utilisables==== 
 + 
 +https://httpd.apache.org/docs/2.4/mod/mod_rewrite.html#rewritecond
  
  
-==== Générer un certificat ====+=====Générer un certificat=====
  
 Sous Redhat : Sous Redhat :
Line 325: Line 439:
 =====De l'utilisation d'apache2ctl===== =====De l'utilisation d'apache2ctl=====
  
-Utilisation de l'outil de diagnostique **apache2ctl** : +Utilisation de l'outil de diagnostique **apache2ctl** (ou **apachectl**, c'est un alias pour la "compatibilité ascendante": 
-  * ''apache2ctl -S'' : permet de lister tous les virtual pris en compte par Apache+  * ''apache2ctl -V'' : affiche la version et les options de compilation 
 +<code bash> 
 +apachectl -V 
 +Server version: Apache/2.4.29 (Unix) 
 +Server built:   Oct 26 2017 16:18:29 
 +Server's Module Magic Number: 20120211:68 
 +Server loaded:  APR 1.6.2, APR-UTIL 1.6.0 
 +Compiled using: APR 1.6.2, APR-UTIL 1.6.0 
 +Architecture:   64-bit 
 +Server MPM:     worker 
 +  threaded:     yes (fixed thread count) 
 +    forked:     yes (variable process count) 
 +Server compiled with.... 
 + -D APR_HAS_SENDFILE 
 + -D APR_HAS_MMAP 
 +[..] 
 +</code> 
 +  * ''apache2ctl -S'' : permet de lister tous les VirtualHost pris en compte par Apache
 <code bash> <code bash>
 apache2ctl -S apache2ctl -S
Line 336: Line 467:
 Syntax OK Syntax OK
 </code> </code>
 +  * ''apache2ctl -M'' : lister les modules chargés
 +
  
 ===== Divers ===== ===== Divers =====
informatique/logiciels/apache.1428448874.txt.gz · Last modified: 2015/04/07 23:21 by pteu