logo article ou rubrique
le serveur apache

Internet désigne l’interconnexion mondiale de réseaux, permettant à des milliards d’équipements disséminés dans le monde de communiquer.
Le Web, de son côté, désigne le système hypertexte constitué de l’ensemble des pages desservies par les serveurs HTTP de par le monde.


par lagrenouille


 

 

* Présentation rapide *

 

* Le serveur HTTP est le premier et le plus connu des projets, mais la fondation Apache va bien plus loin que cela, et gère d’autres projets d’envergure. serveur LDAP, * OpenOffice.org, SpamAssassin, Subversion, Tomcat....
*Apache supporte – bien évidemment – le protocole sécurisé HTTPS, qui permet de chiffrer les communications afin d’en empêcher la lecture par un tiers. Ce support est disponible avec le module mod_ssl .
 
Un serveur web est un logiciel permettant à des clients, d’accéder à des pages web, c’est-à-dire en réalité des fichiers au format HTML à partir d’un navigateur.
Un serveur web est donc un « simple » logiciel capable d’interpréter les requêtes HTTP arrivant sur le port associé au protocole HTTP (par défaut sur le port 80), et de fournir une réponse avec ce même protocole.
Apache possède désormais de nombreuses fonctionnalités dont la possibilité de définir une configuration spécifique à chaque fichier ou répertoire partagé, ainsi que de définir des restrictions d’accès grâce aux fichiers htaccess.
 
Toutes les fonctionnalités d’Apache2 sont implémentées sous forme de modules. Certains d’entre eux sont simplement compilés directement dans apache de manière statique. Pour en connaître la liste, il suffit d’exécuter apache2 avec l’option -l :
 
* les Modules du serveur apache, c’est ici : *
http://httpd.apache.org/docs/2.4/mod/
 
Apache peut également être utilisé comme proxy ou comme reverse proxy.
Lire la doc à ce sujet.
Un proxy permet de centraliser et éventuellement filtrer les accès à Internet au sein d’un réseau ; cela permet par exemple de mutualiser les ressources et de servir de cache au niveau du réseau, en ne chargeant une même image qu’une seule fois, même pour plusieurs clients.
Un reverse proxy, c’est la même logique côté serveur ; c’est un serveur qui reçoit les requêtes des clients et qui les redirige vers un ou plusieurs serveurs web, tout en cachant les données qu’il peut, afin de limiter la charge sur les serveurs web eux-mêmes.
 

* Mon serveur apache en local *

 
* Le serveur apache, sans en voir toute la configuration, car c’est assez complexe et vaste, possédant beaucoup de modules,lui permettant de très nombreuses fonctionnalités.
* Je vais faire un petit tour d’horizon très simplifié.
 
* Commençons par l’installation de mon petit serveur perso. comment, quoi et pourquoi, sachant qu j’utilise les CMS spip et wordpress .

 

 
 

  • L’installation de mes sites, je les installerai dans un répertoire que je nomme web, ensuite, je ferai des liens symbolique vers /var/www/html
    - je mets ensuite les droits à 770, excepté quelques fichiers de spip à l’installation qui requièrent 777 .

- Pour que apache puisse écrire sur les fichiers, le groupe doit appartenir à www-data
- Puis je m’ajoute user www-data avec la commande adduser.
pour vérifier si vous êtes bien enregistré : tapez dans votre terminal.
 

 

  • Il faut configurer un VirtualHost par site et les activer.
     
    La configuration d’Apache utilise des balises sous la forme
     
    <...>,  / , </...>
    <VirtualHost *:80> ou voir <VirtualHost *:8390> suivant le port
    DocumentRoot /var/www
    [...]
    </VirtualHost>
    ~
    * Nous définissons donc ici un hôte virtuel. L’argument en ouverture du
    bloc, « *:80 », ou autre port, correspond à l’interface physique et au port sur lequel écouter.

     
    https://httpd.apache.org/docs/2.4/fr/vhosts/examples.html
     
    * La majorité de la configuration d’Apache se fait dans ces fichiers « sites-available »
     
    Ça se passe dans /etc/apache2/sites-available
    les répertoires mods-enabled et sites-enabled ne contiennent que des liens symboliques vers
    leurs équivalents en *-available .
    ces liens symboliques sont gérés par les commandes :
    - a2ensite pour activer un site (apache2 enable site) ;
    - a2dissite pour désactiver un site (apache2 disable site) ;
    - a2enmod pour activer un module (apache2 enable module) ;
    - a2dismod pour désactiver un module (apache2 disablemodule).
     
    * Sur Debian, l’hôte virtuel de la configuration par défaut d’Apache2 est dans un fichier 000-default : ces trois zéros lui permettent d’être évalué en premier lieu et de servir d’hôte par défaut.
    * Autrement dit, ne placez pas une application critique et privée dans le
    tout premier hôte virtuel : n’importe qui pourrait y accéder sans même
    connaître son URL !
     
    * le paramètre DocumentRoot , que nous venons de rencontrer, permet de signaler à Apache où il doit chercher les fichiers à desservir
    * Les fichiers .htaccess permettent également de définir des contextes :
    - Voir plus loin
     
    * le fichier php.ini *
     
    *Réglage maximale la taille de vos fichiers uploadés sur votre site
    modification du fichier php.ini [1]
     
    * les fichiers .htaccess *
     
    * ces fichiers permettent de modifier certains aspects de la configuration d’Apache sans avoir accès aux fichiers de configuration ; c’est très utile sur des serveurs où les webmestres n’ont pas accès au serveur en tant que root : ils peuvent alors définir certains points de configuration de manière indépendante.
    * Cependant les fichiers .htacces sons sensible à la casse et parfois il vaut mieux mettre certaines configurations directement dans le fichier apache.
    - Les fichiers .htaccess ne doivent être utilisés que si vous n’avez pas accès au fichier de configuration du serveur principal. L’utilisation des fichiers .htaccess ralentit le fonctionnement de votre serveur .
    * Il est toujours préférable de définir les directives que vous pouvez inclure dans un fichier .htaccess dans une section Directory, car elles produiront le même effet avec de meilleures performances.

* Les fichiers .htaccess fournissent une méthode pour modifier la configuration du serveur au niveau d’un répertoire. Un fichier, contenant une ou plusieurs directives de configuration, est placé dans un répertoire de documents particulier, et ses directives s’appliquent à ce répertoire et à tous ses sous-répertoires.
* Si je regarde les .htaccess de mon installation "galette" en local, seul localhost est autorisé.
 

 Options -Indexes
 <IfModule mod_authz_core.c>
   Require all denied
 </IfModule>
 <IfModule !mod_authz_core.c>
   Order deny,allow
   Deny from All
   Allow from 127.0.0.1
 </IfModule>

 
* En général, les fichiers .htaccess utilisent la même syntaxe que les fichiers de configuration principaux. Ce que vous pouvez mettre dans ces fichier est déterminé par la directive AllowOverride.
 
 

  • le fichier /etc/apache2/ports.conf définit les ports en écoute.
    on retrouve les directives Listen et NameVirtualHost
     
    Listen 80

    <IfModule ssl_module>
            Listen 443
    </IfModule>

     

  • httpd.conf pour les paramètres spécifiques à
    l’administrateur/au système. généralement, ce fichier est
    vide et inutilisé .
     
    * les processus sont visible avec la commande.
     

Pour voir tous les modules apache chargés, faites la commande :

* lorsque l’on saisit l’adresse (URL) d’un site dans un navigateur, une requête « DNS » [2]
transforme cette adresse textuelle (FQDN) en adresse IP numérique. Cette adresse IP est celle de votre machine où réside votre serveur web Apache .
FQDN (Fully Qualified Domain Name )ou (nom de domaine réservé) peut s’appliquer à autant de virtualhost,( d’hôtes virtuels), que vous aurez configuré sous la même ip.
* ."Dans les grandes lignes, lorsque l’on saisit l’adresse (URL) d’un site dans un navigateur, une requête DNS transforme cette adresse textuelle (appelée FQDN, pour Fully Qualified Domain Name) en adresse IP numérique. Cette adresse IP est celle de votre machine où réside le serveur Apache (votre serveur web).
Cette association FQDN/adresse IP n’est pas nécessairement exclusive :
un nombre illimité de FQDN peuvent être associés à une seule et même adresse IP. à partir de là, lorsque votre navigateur web interroge un serveur, il précise le FQDN qu’il recherche et le serveur HTTP - Apache en l’occurrence - est capable de desservir des données différentes
selon le serveur demandé. L’hôte physique est le même, mais il s’agit virtuellement, pour les navigateurs (clients) qui s’y connectent, de serveurs différents : dans la terminologie ’Apache, on parle alors d’« hôtes virtuels ».
Dans le cas de figure le plus courant, on souhaite donc héberger deux sites web ou plus, ayant des adresses (URL) différentes, mais avec une seule interface réseau et une seule adresse IP....."
 

* virtualhost, extrait court des directives de configuration *

 

NameVirtualHost  : indique au serveur web Apache que sur le port 1280 on a l’IP 192.168.1.12
soit : NameVirtualHost 192.168.1.12:1280
.ServerName indique l’URL du site Web hébergé
ServerName localhost
ServerAdmin webmaster@localhost
DocumentRoot permet de signaler à Apache où il doit chercher les fichiers à desservir, En d’autres termes, c’est le répertoire racine du serveur, le répertoire de référence lorsqu’un chemin est relatif (peu importe la directive et l’endroit.
ServerName permet d’identifier précisément l’hôte virtuel, c’est son nom principal.
ServerAlias permet de donner un ou plusieurs noms complémentaires, par lesquels les visiteurs pourront également accéder au site concerné
Timeout 120 c’est, en secondes le temps mort maximal requis entre une émission et une réception, ici 120s.

 
* Les autorisations d’accès
* Les directives Order , Allow et Deny permettent de définir les autorisations
d’accès, selon les éléments fournis par les requêtes (adresses IP, nom d’hôte,
user-agent...) :
* Allow définit les clients autorisés ;
* Deny définit les clients interdits ;
* Order définit l’ordre dans lequel évaluer ces deux directives.
 
* Bref...
* Je peux donc donc héberger mes deux sites web (spip et wp) voir plus encore, ayant des adresses (URL) différentes, mais avec une seule interface réseau et une seule adresse IP.
 

Des outils pour la surveillance d’apache et les logs d’apache

 

 
*apachetop*

  • Outil de surveillance de Apache en temps réel
    apache top est un utilitaire en temps réel basé sur curses qui affiche des informations à propos d’une copie d’Apache en cours d’exécution.

Il est conçu sur le modèle de l’utilitaire standard « top » et affiche des informations telles que le nombre de requêtes par seconde, le nombre d’octets par seconde et les adresses les plus souvent demandées.

Il doit être lancé à partir d’une machine exécutant Apache car il fonctionne en traitant les fichiers de journaux situés dans /var/log/apache
 

 
*multtail*
 

 
Difficile de comprendre et de traduire les réponses avec :

 
* Apache permet bien sûr d’enregistrer des journaux (logs), afin de tracer d’éventuels problèmes
rencontrés. Mais les possibilités en termes de journalisation vont plus loin ; on peut notamment
personnaliser les journaux relatifs aux requêtes effectuées par les clients.
Ces fonctionnalités sont offertes par les modules mod_log_config , mod_log_debug , mod_
log_forensic et mod_logio .
 
* A propos de l’installation de php *
apt-get install libapache2-mod-php7.0 installera automatiquement MPM Prefork
ce module est directement activé dans Apache 2 ; en effet, la commande
a2enmod php est automatiquement exécutée par le script de post-installation.
 
* Sur Debian Stretch la configuration de PHP se situe dans le répertoire /etc/php/7 . Plus précisément, ce répertoire contient deux sous-répertoires :
→ /etc/php/7.0/cli pour la configuration de la commande PHP utilisée en ligne de commandes,
→ /etc/php/7.0/apache2 pour la configuration de PHP lorsqu’il est utilisé par Apache 2.
* Le répertoire /etc/php/7.0/apache2/conf.d/ contient des fichiers de configuration complémentaires qui sont également chargés.
 
* Ce découpage permet de gérer plus proprement les configurations de chaque module
de PHP., l’interpréteur PHP est lui-même également modulaire.
 
* Quelques modules php parmi tant d’autres
* php7.0-ldap pour interagir avec une base LDAP ;
* php7.0-mysql pour lire ou écrire dans une base MySQL ;
* php7.0-pgsql pour lire ou écrire dans une base PostgreSQL ;
* php7.0-imap pour la gestion des courriers électroniques par IMAP ;
* php7.0-enchant pour la vérification orthographique ;
* php7.0-sqlite pour lire ou écrire dans un fichier SQLite...
* php7.0-gd pour la manipulation des images
* php7.0-bz2 bzip2 module for PHP [default]
* php7.0-cli interpréteur en ligne de commande pour le langage de script PHP
* php7.0-curl CURL module for PHP
* phpmyadmin MySQL web administration tool (graph)
 
 

HTTPS -certificat de sécurité SSL :

 
’<’VirtualHost *:443>
 
* Les hébergeurs comme Gandi, ovh, 1&1 et bien d’autres vous vendent des certificats SSL.
(voir gratuit pour un temps limité..)
* Il existe un certificat gratuit "Let’s Encrypt", renouvelable manuellement ou automatiquement..
* SSL signifie : Secure Sockets Layer, protocole de sécurisation des échanges sur Internet, devenu TLS Transport Layer Security en 2001 .

  • HTTPS signifie : ’HyperText Transfer Protocol Secure, « protocole de transfert hypertexte sécurisé »
     
  • Pour activer HTTPS sur votre site Web, vous devez donc obtenir le certificat à partir d’une autorité de certification (AC ou CA pour Certificate Authority en anglais). Let’s Encrypt est une autorité de certification.
     
    * Le client ACME Certbot peut automatiser la création et l’installation de certificats sans temps d’arrêt. Mode expert pour les braves..
    * Cerbot vous dmandera ce que vous utilisez : Apache, nginx ou autre...ainsi que votre système, debian, archlinux, fedora ou autre..
    * Certbot est destiné à être administré en ligne de commande sur le serveur sur lequel votre (ou vos)site est hébergé.
     

     
    Certbot dispose d’un plugin Apache, qui est supporté sur de nombreuses plates-formes, et automatise l’installation des certificats.

* En exécutant cette commande, vous obtiendrez un certificat et Certbot éditera automatiquement votre configuration Apache pour la servir. Si vous vous sentez plus conservateur et que vous souhaitez modifier manuellement la configuration d’Apache, vous pouvez utiliser la sous-commande certonly :

 
* les certificats Let’s Encrypt durent 90 jours
* Pour automatiser le renouvellement automatique de vos certificats

 

 
Lire la documentation pour plus d’infos




Haut de page