informatique:logiciels:apache
Differences
This shows you the differences between two versions of the page.
| Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
| informatique:logiciels:apache [2009/01/30 17:44] – openssl pteu | informatique:logiciels:apache [2020/11/02 17:57] (current) – pteu | ||
|---|---|---|---|
| Line 1: | Line 1: | ||
| - | {{tag> | ||
| ====== Apache ====== | ====== Apache ====== | ||
| - | //cette section n'est pas à jour// | ||
| - | Apache est le plus répandu des serveur | + | [[http:// |
| + | Les fichiers de configuration diffèrent selon la distribution Linux utilisée : sous Redhat-like le fichier de conf principal est **/ | ||
| - | ===== Gestion | + | =====Configuration===== |
| + | |||
| + | Dans les versions les plus récentes d' | ||
| + | |||
| + | De même pour les modules, avec les dossiers **mods-available/ | ||
| + | |||
| + | |||
| + | Exemple de directives de configuration commentées : | ||
| + | * **UserDir** public_html : Permet de rendre accessible le dossier ~/ | ||
| + | * **DirectoryIndex** index.html default.htm : Fichiers considérés comme pages d' | ||
| + | * **ScriptAlias** /cgi-bin/ / | ||
| + | |||
| + | ====Vérifications==== | ||
| + | |||
| + | Il existe 3 syntaxes pour vérifier la configuration d' | ||
| + | <code bash> | ||
| + | httpd -t | ||
| + | apachectl -t | ||
| + | # cette commande produit un code de sortie, 0 pour OK et 1 en cas d' | ||
| + | |||
| + | # les 2 commandes ci-dessous indique où est l' | ||
| + | apachectl configtest | ||
| + | service httpd configtest | ||
| + | # cette dernière commande est un alias de la commande précédente (sous Redhat) | ||
| + | </ | ||
| + | |||
| + | |||
| + | ====Virtualhost==== | ||
| + | |||
| + | Un **Virtualhost** est un site virtuel ; cela permet à Apache de gérer plusieurs sites webs sur une même machine. On peut grâce à cela avoir un site en HTTP et un en HTTPS par exemple. | ||
| + | |||
| + | Exemple de configuration basique : | ||
| + | <code bash> | ||
| + | NameVirtualHost 192.168.0.1: | ||
| + | |||
| + | < | ||
| + | | ||
| + | | ||
| + | | ||
| + | </ | ||
| + | |||
| + | < | ||
| + | | ||
| + | | ||
| + | | ||
| + | </ | ||
| + | </ | ||
| + | |||
| + | server1 est accessible par http:// | ||
| + | |||
| + | Une exception cependant : http:// | ||
| + | |||
| + | Bien sur, pour être accessibles, | ||
| + | |||
| + | |||
| + | =====Droits | ||
| Il est possible de limiter l' | Il est possible de limiter l' | ||
| - | * **globale** : la gestion des accès se fait à partir des règles situées dans le fichier | + | * **globale** : la gestion des accès se fait à partir des règles situées dans les fichiers |
| - | * **locale** : la gestion des accès se fait de manière indépendante dans chaque répertoire ; les règles sont déportées dans un fichier | + | * **locale** : la gestion des accès se fait de manière indépendante, dans chaque répertoire ; les règles sont déportées dans des fichiers nommés |
| Quelque soit la manière, la syntaxe reste la même. | Quelque soit la manière, la syntaxe reste la même. | ||
| + | |||
| + | On peut surcharger la méthode globale avec un .htaccess situé dans un répertoire ; cette possibilité se configure avec la directive **AllowOverride** qui permet de définir quelles sont les options que l'on peut surcharger. | ||
| + | <code bash> | ||
| + | < | ||
| + | | ||
| + | </ | ||
| + | </ | ||
| + | |||
| + | <WRAP center round important 60%> | ||
| + | Depuis la version 2.4 d' | ||
| + | </ | ||
| + | |||
| + | < | ||
| + | |||
| + | > | ||
| + | > | ||
| + | > * **Allow, | ||
| + | > * **Deny, | ||
| + | |||
| + | Pour être plus clair, voici le tableau de décision d' | ||
| + | ^Match | ||
| + | ^Match Allow only | Request allowed | ||
| + | ^Match Deny only | Request denied | ||
| + | ^No match | Default to second directive: Denied | Default to second directive: Allowed | | ||
| + | ^Match both Allow & Deny | Final match controls: Denied | Final match controls: Allowed | | ||
| Line 20: | Line 99: | ||
| === Création du htpasswd === | === Création du htpasswd === | ||
| - | Le fichier **.htpasswd** va contenir les login/pass des utilisateurs valides. | + | Le fichier **.htpasswd** va contenir les correspondace |
| Pour cela, on va se servir d'un programme situé dans '' | Pour cela, on va se servir d'un programme situé dans '' | ||
| Line 29: | Line 108: | ||
| === Méthode globale === | === Méthode globale === | ||
| - | | + | <code bash> |
| - | | + | < |
| - | | + | |
| - | | + | |
| - | | + | |
| - | | + | |
| - | require | + | |
| - | </ | + | AuthGroupFile |
| + | | ||
| + | </ | ||
| + | </ | ||
| + | |||
| + | Ces lignes sont à placer soit dans la configuration d'un virtualhost (dans '' | ||
| - | Ces lignes sont à placer soit dans la configuration d'un virtual host (dans '' | + | Le fichier .htpasswd est modifié |
| + | <code bash> | ||
| + | # syntaxe : < | ||
| + | potos: toto titi | ||
| + | papotos: trudi | ||
| + | </ | ||
| Explications : | Explications : | ||
| Line 44: | Line 133: | ||
| * **AuthType** : Définit le mode d' | * **AuthType** : Définit le mode d' | ||
| * **AuthUserFile** : Définit le fichier contenant les logins/pass | * **AuthUserFile** : Définit le fichier contenant les logins/pass | ||
| - | * **Require** : Définit | + | * **Require** : Définit |
| + | * valid-user : l' | ||
| + | * user toto : l' | ||
| + | * group potos : l' | ||
| **AllowOverride** est une directive qui sert à gérer les droits des fichiers .htaccess. | **AllowOverride** est une directive qui sert à gérer les droits des fichiers .htaccess. | ||
| Line 77: | Line 169: | ||
| - | ===== mod ssl ===== | + | =====Proxy / mod_proxy===== |
| + | |||
| + | Ce module permet d' | ||
| + | * 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 | ||
| + | </ | ||
| + | |||
| + | Exemple de configuration commentée : | ||
| + | <code bash> | ||
| + | # ref : https:// | ||
| + | < | ||
| + | |||
| + | # active la fonctionnalité de mandataire direct | ||
| + | # ne concerne pas les directives ProxyPass (reverse proxy, voir plus bas) | ||
| + | ProxyRequests On | ||
| + | |||
| + | <Proxy *> | ||
| + | | ||
| + | # on refuse tout par défaut | ||
| + | | ||
| + | # restriction sur un domaine/nom d' | ||
| + | # attention cela provoque une double requete DNS + inverse de la part du serveur | ||
| + | # | ||
| + | # restriction au localhost (127/8, ::1, IP du serveur local) | ||
| + | | ||
| + | # restriction des IPs clientes au seul LAN | ||
| + | | ||
| + | # NB : | ||
| + | # - si des directives doivent être toutes validées (aucune négative et au moins une positive), | ||
| + | # on encadre par < | ||
| + | # - si au moins l'une doit être positive, on encadre par < | ||
| + | # - si aucune ne doit retourner de résultat positif on utilise < | ||
| + | </ | ||
| + | |||
| + | # ajout automatique du suffixe aux noms d' | ||
| + | ProxyDomain " | ||
| + | # connexion sans mandataire | ||
| + | NoProxy | ||
| + | # définit le proxy suivant pour toutes (*) les requêtes | ||
| + | # | ||
| + | # ProxyRemote ftp ftp:// | ||
| + | # ProxyRemoteMatch est identique à ceci près que le premier paramètre est une regexpr | ||
| + | |||
| + | # Créer un " | ||
| + | # ex : http:// | ||
| + | < | ||
| + | | ||
| + | </ | ||
| + | # syntaxe alternative, | ||
| + | #ProxyPass "/ | ||
| + | |||
| + | # Enable/ | ||
| + | # (" | ||
| + | # 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; | ||
| + | # | ||
| + | # préserve l' | ||
| + | # | ||
| + | |||
| + | # | ||
| + | # Filtrages destinations | ||
| + | # | ||
| + | # bloquer via nom d' | ||
| + | # attention les DNS sont résolus au démarrage d' | ||
| + | ProxyBlock " | ||
| + | </ | ||
| + | |||
| + | < | ||
| + | # controle utilisation de la methode CONNECT sur certains ports seulement | ||
| + | # défaut : AllowCONNECT 443 563 | ||
| + | | ||
| + | </ | ||
| + | </ | ||
| + | |||
| + | =====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 : | ||
| - | | + | <code bash> |
| + | a2enmod ssl | ||
| + | </ | ||
| + | |||
| + | =====mod_rewrite===== | ||
| + | |||
| + | Le **mod_rewrite** permet de manipuler les requêtes entrantes du serveur http. | ||
| + | |||
| + | Activation du module Apache : | ||
| + | <code bash> | ||
| + | a2enmod rewrite | ||
| + | </ | ||
| + | |||
| + | ====Syntaxe==== | ||
| + | |||
| + | source : https:// | ||
| + | |||
| + | Exemple de blocage de sites : | ||
| + | <code bash> | ||
| + | < | ||
| + | | ||
| + | | ||
| + | | ||
| + | | ||
| + | </ | ||
| + | </ | ||
| + | On enchaine différentes conditions '' | ||
| + | |||
| + | Exemple de mise ne place d'une redirection (permanente=301 par défaut) : ajouter ces lignes dans le fichier de configuration du vhost (''/ | ||
| + | <code bash> | ||
| + | < | ||
| + | RewriteEngine On | ||
| + | RewriteRule ^(.*)$ http:// | ||
| + | </ | ||
| + | </ | ||
| + | |||
| + | **Syntaxe** : '' | ||
| + | |||
| + | dans l' | ||
| + | <code bash> | ||
| + | [..] | ||
| + | RewriteRule ^(.*)$ http:// | ||
| + | </ | ||
| + | |||
| + | ====Variables utilisables==== | ||
| + | |||
| + | https:// | ||
| + | =====Générer un certificat===== | ||
| - | ==== Générer | + | Sous Redhat : |
| + | <code bash> | ||
| + | cd / | ||
| + | # pour créer uncertificat auto-signé | ||
| + | make testcert | ||
| + | # pour créer | ||
| + | make certreq | ||
| + | </ | ||
| Ensuite on **génère le certificat** : | Ensuite on **génère le certificat** : | ||
| Line 203: | Line 435: | ||
| **NB** : dans tous les fichiers suivant, les commentaires sont précédés d'un dièze (#) | **NB** : dans tous les fichiers suivant, les commentaires sont précédés d'un dièze (#) | ||
| **ATTENTION** : il redémarrer les serveurs pour qu'ils prennent en compte la nouvelle configuration (clic droit sur l' | **ATTENTION** : il redémarrer les serveurs pour qu'ils prennent en compte la nouvelle configuration (clic droit sur l' | ||
| + | |||
| + | |||
| + | =====De l' | ||
| + | |||
| + | Utilisation de l' | ||
| + | * '' | ||
| + | <code bash> | ||
| + | apachectl -V | ||
| + | Server version: Apache/ | ||
| + | Server built: | ||
| + | Server' | ||
| + | Server loaded: | ||
| + | Compiled using: APR 1.6.2, APR-UTIL 1.6.0 | ||
| + | Architecture: | ||
| + | Server MPM: | ||
| + | threaded: | ||
| + | forked: | ||
| + | Server compiled with.... | ||
| + | -D APR_HAS_SENDFILE | ||
| + | -D APR_HAS_MMAP | ||
| + | [..] | ||
| + | </ | ||
| + | * '' | ||
| + | <code bash> | ||
| + | apache2ctl -S | ||
| + | VirtualHost configuration: | ||
| + | wildcard NameVirtualHosts and _default_ servers: | ||
| + | *:80 is a NameVirtualHost | ||
| + | | ||
| + | port 80 namevhost 192.168.1.1 (/ | ||
| + | Syntax OK | ||
| + | </ | ||
| + | * '' | ||
| Line 215: | Line 480: | ||
| Cela marche aussi pour les autres codes d' | Cela marche aussi pour les autres codes d' | ||
| - | ==== ServerToken | + | ==== ServerTokens |
| - | | + | |
| - | Pour cacher certaines informations sur la version et les extensions d' | + | Pour cacher certaines informations sur la version et les extensions d' |
| + | |||
| + | **Full** | ||
| + | Apache/2.2.9 (Debian) PHP/ | ||
| + | **OS** | ||
| + | Apache/ | ||
| + | **Minimal** | ||
| + | Apache/ | ||
| + | **Minor** | ||
| + | Apache/2.2 Server at ymir.rv Port 80 | ||
| + | **Major** | ||
| + | Apache/2 Server at ymir.rv Port 80 | ||
| + | **Prod** | ||
| + | Apache Server at ymir.rv Port 80 | ||
| ==== ServerSignature ==== | ==== ServerSignature ==== | ||
| - | | + | <code bash> |
| + | ServerSignature On | Off | EMail | ||
| + | </ | ||
| + | |||
| + | Pour afficher la signature d' | ||
| + | |||
| + | ====ScriptAlias==== | ||
| + | |||
| + | Aujourd' | ||
| + | < | ||
| + | Internal Server Error | ||
| + | |||
| + | The server encountered an internal error or misconfiguration and was unable to complete your request. | ||
| + | |||
| + | Please contact the server administrator, | ||
| + | |||
| + | More information about this error may be available in the server error log. | ||
| + | </ | ||
| + | |||
| + | D' | ||
| + | < | ||
| + | [Mon Jun 24 21:05:03 2013] [error] [client 192.168.1.1] (13)Permission denied: exec of '/ | ||
| + | [Mon Jun 24 21:05:03 2013] [error] [client 192.168.1.1] Premature end of script headers: toto.html | ||
| + | </ | ||
| - | Pour afficher la signature d' | + | Après avoir tourné |
| + | <code bash> | ||
| + | ScriptAlias /foo "/ | ||
| + | < | ||
| + | | ||
| + | | ||
| + | Order allow, | ||
| + | Allow from 192.168.1 | ||
| + | </ | ||
| + | </ | ||
| + | Et oui c'est bien ce fâcheux '' | ||
informatique/logiciels/apache.1233337442.txt.gz · Last modified: 2013/10/14 20:55 (external edit)