Compilation

De Wiki de Jordan LE NUFF
Sauter à la navigation Sauter à la recherche
 
(3 révisions intermédiaires par le même utilisateur non affichées)
Ligne 13 : Ligne 13 :
  
 
{{terminal|text=
 
{{terminal|text=
[root@centos8temp downloads]# wget http://apache.crihan.fr/dist//httpd/httpd-2.4.41.tar.gz
+
[root@myserver downloads]# wget http://apache.crihan.fr/dist//httpd/httpd-2.4.41.tar.gz
 
--2020-01-25 15:55:58--  http://apache.crihan.fr/dist//httpd/httpd-2.4.41.tar.gz
 
--2020-01-25 15:55:58--  http://apache.crihan.fr/dist//httpd/httpd-2.4.41.tar.gz
 
Résolution de apache.crihan.fr (apache.crihan.fr)… 195.221.21.36, 2001:660:7401:211::36
 
Résolution de apache.crihan.fr (apache.crihan.fr)… 195.221.21.36, 2001:660:7401:211::36
Ligne 487 : Ligne 487 :
  
 
==== Configuration personnalisée ====
 
==== Configuration personnalisée ====
C'est ici tout l'intérêt de compiler soi-même Apache (ou tout autre programme) : pouvoir définir construire un binaire Apache optimisé à son besoin.
+
C'est ici tout l'intérêt de compiler soi-même Apache (ou tout autre programme) : pouvoir construire un binaire Apache optimisé à son besoin.
  
 
Voici un exemple de configuration personnalisée de compilation :
 
Voici un exemple de configuration personnalisée de compilation :
Ligne 528 : Ligne 528 :
 
--disable-version
 
--disable-version
 
</pre>
 
</pre>
 +
 +
==== Configuration performances optimisées ====
 +
Afin d'obtenir les meilleures performances possibles, il est conseillé d'avoir le minimum de modules activés, et qu'ils soient lié statiquement à Apache (c'est-à-dire qu'il ne sera pas possible d'en ajouter/retirer dynamiquement. Pour ce faire, il faudra re-compiler).
 +
Voici un modèle de configuration de compilation :
 +
<pre>
 +
./configure \
 +
--prefix=/local/httpd/current \
 +
--sysconfdir=/local/httpd/conf \
 +
--enable-proxy \
 +
--enable-proxy-http \
 +
--enable-proxy-wstunnel \
 +
--enable-proxy-fcgi \
 +
--enable-rewrite \
 +
--enable-authz-host \
 +
--enable-mime \
 +
--enable-static-support \
 +
--enable-remoteip \
 +
--enable-status \
 +
--enable-systemd \
 +
--enable-mods-static="proxy rewrite authz-core authz-host log-config alias dir unixd mime remoteip status systemd" \
 +
--disable-so \
 +
--disable-proxy-connect \
 +
--disable-proxy-ftp \
 +
--disable-proxy-scgi \
 +
--disable-proxy-uwsgi \
 +
--disable-proxy-fdpass \
 +
--disable-proxy-ajp \
 +
--disable-proxy-balancer \
 +
--disable-proxy-express \
 +
--disable-proxy-hcheck \
 +
--disable-access-compat \
 +
--disable-auth \
 +
--disable-auth-basic \
 +
--disable-authn-core \
 +
--disable-authn-file \
 +
--disable-authz-groupfile \
 +
--disable-authz-user \
 +
--disable-autoindex \
 +
--disable-env \
 +
--disable-filter \
 +
--disable-reqtimeout \
 +
--disable-setenvif \
 +
--disable-version \
 +
--disable-authn-dbm \
 +
--disable-authn-anon \
 +
--disable-authn-dbd \
 +
--disable-authn-socache \
 +
--disable-authz-dbm \
 +
--disable-authz-owner \
 +
--disable-authz-dbd \
 +
--disable-auth-form \
 +
--disable-auth-digest \
 +
--disable-allowmethods \
 +
--disable-cache \
 +
--disable-file-cache \
 +
--disable-headers \
 +
--disable-cache-disk \
 +
--disable-cache-socache \
 +
--disable-socache-dbm \
 +
--disable-socache-memcache \
 +
--disable-socache-redis \
 +
--disable-socache-shmcb
 +
</pre>
 +
 +
Voici l'explication des options :
 +
*--prefix=/local/httpd/current:
 +
:Localisation principale des fichiers Apache à installer
 +
*--sysconfdir=/local/httpd/conf
 +
:Localisation des fichiers de configuration Apache à installer. En cas de recompilation, si les fichiers existent déjà, ils seront conservés.
 +
*--enable-proxy
 +
:Activation des fonctions de base pour faire du proxying
 +
*--enable-proxy-http
 +
:Active la prise en charge du protocole HTTP par le proxy
 +
*--enable-proxy-wstunnel
 +
:Active la prise en charge des webservices par le proxy
 +
*--enable-proxy-fcgi
 +
:Active la prise en charge du FCGI par le proxy. Utile pour PHP-FPM
 +
*--enable-rewrite
 +
:Active le module pour la ré-écriture d’URL
 +
*--enable-authz-host
 +
:Active le filtrage par adresse IP (Require IP …)
 +
*--enable-mime
 +
:Active la reconnaissance des types de fichier
 +
*--enable-static-support
 +
:Compile une version statique des binaires tels que « ab », « rotatelogs », … Cela permet à ces binaires de ne pas dépendre des librairies du serveur.
 +
*--enable-remoteip
 +
:Active la reconnaissance de l’adresse IP publique distante du client derrière les différents proxys
 +
*--enable-status
 +
:Active la mise à disposition des informations en temps réel relatives à Apache
 +
*--enable-systemd
 +
:Active l’intégration avec systemd de Linux
 +
*--enable-mods-static="proxy rewrite authz-core authz-host log-config alias dir unixd mime remoteip status systemd"
 +
:Force la compilation statique des modules mentionnés. Ces modules sont liés statiquement à Apache et seront toujours diponibles.
 +
*--disable-so
 +
:Désactive le module permettant de charger dynamiquement les autres modules. En effet, la présente configuration cherchant à compiler Apache de façon totalement statique, cette option prend tout son sens.
 +
*--disable-<module>
 +
:Désactive le module qui n’est pas nécessaire.
 +
 +
Ce qui donne le résultat suivant :
 +
{{terminal|text=
 +
[root@myserver httpd-2.4.43]# httpd -M
 +
[root@myserver httpd-2.4.43]# httpd -V
 +
Server version: Apache/2.4.43 (Unix)
 +
Server built:  Jun 19 2020 10:24:36
 +
Server's Module Magic Number: 20120211:92
 +
Server loaded:  APR 1.7.0, APR-UTIL 1.6.1
 +
Compiled using: APR 1.7.0, APR-UTIL 1.6.1
 +
Architecture:  64-bit
 +
Server MPM:    event
 +
  threaded:    yes (fixed thread count)
 +
    forked:    yes (variable process count)
 +
Server compiled with....
 +
-D APR_HAS_SENDFILE
 +
-D APR_HAS_MMAP
 +
-D APR_HAVE_IPV6 (IPv4-mapped addresses enabled)
 +
-D APR_USE_PROC_PTHREAD_SERIALIZE
 +
-D APR_USE_PTHREAD_SERIALIZE
 +
-D SINGLE_LISTEN_UNSERIALIZED_ACCEPT
 +
-D APR_HAS_OTHER_CHILD
 +
-D AP_HAVE_RELIABLE_PIPED_LOGS
 +
-D DYNAMIC_MODULE_LIMIT=256
 +
-D HTTPD_ROOT="/local/httpd/current"
 +
-D SUEXEC_BIN="/local/httpd/current/bin/suexec"
 +
-D DEFAULT_PIDLOG="logs/httpd.pid"
 +
-D DEFAULT_SCOREBOARD="logs/apache_runtime_status"
 +
-D DEFAULT_ERRORLOG="logs/error_log"
 +
-D AP_TYPES_CONFIG_FILE="/local/httpd/conf/mime.types"
 +
-D SERVER_CONFIG_FILE="/local/httpd/conf/httpd.conf"
 +
[root@myserver httpd-2.4.43]# httpd -l
 +
Compiled in modules:
 +
  core.c
 +
  mod_authz_host.c
 +
  mod_authz_core.c
 +
  http_core.c
 +
  mod_mime.c
 +
  mod_log_config.c
 +
  mod_remoteip.c
 +
  mod_proxy.c
 +
  mod_proxy_http.c
 +
  mod_proxy_fcgi.c
 +
  mod_proxy_wstunnel.c
 +
  event.c
 +
  mod_unixd.c
 +
  mod_systemd.c
 +
  mod_status.c
 +
  mod_dir.c
 +
  mod_alias.c
 +
  mod_rewrite.c
 +
}}
 +
 +
== Service ==
 +
Créer le fichier <code>/usr/lib/systemd/system/http.service</code> dont le contenu est le suivant :
 +
<pre>
 +
[Unit]
 +
Description=The Apache HTTP Server
 +
After=network.target
 +
 +
[Service]
 +
Type=notify
 +
ExecStart=/local/httpd/current/bin/httpd -D FOREGROUND -k start
 +
ExecReload=/local/httpd/current/bin/httpd -k graceful
 +
ExecStop=/local/httpd/current/bin/httpd -k stop
 +
KillMode=mixed
 +
TimeoutStopSec=60
 +
 +
[Install]
 +
WantedBy=multi-user.target
 +
</pre>
 +
 +
Recharger ensuite les services pour prendre en compte la modification :
 +
systemctl daemon-reload
 +
 +
Activer le démarrage du service au démarrage du serveur :
 +
systemctl enable http

Version actuelle datée du 19 juin 2020 à 10:22

Présentation

Cette page a pour objet de décrire comment compiler le serveur web Apache.

Plus d'informations sur le site de l'éditeur :

Téléchargement des sources

Se rendre sur la page de téléchargement d'Apache et aller à la section de téléchargement de la "Stable Release - Latest Version". Copier le lien de téléchargement de la version en cours (2.4.41 à la rédaction de ce document).

Se connecter au serveur, se rendre dans le dossier de téléchargement et télécharger les sources Apache :

wget http://apache.crihan.fr/dist//httpd/httpd-2.4.41.tar.gz
Putty icon.png Console SSH

Décompression de l'archive

Décompresser l'archive dans le dossier cible de compilation :

tar -zxvf httpd-2.4.41.tar.gz -C /local/builds/

Compilation

Options de compilation disponibles

Se rendre dans le dossier de compilation et taper la commande suivante pour afficher les options de compilation disponibles :

./configure --help
Putty icon.png Console SSH

Configuration de la compilation

La commande ./configure lance la configuration de la compilation avec certaines options par défaut. Les valeurs par défaut de certaines de ces options sont indiquées dans la section --help de la commande.

Configuration par défaut

Pour lancer la configuration de la compilation avec les options par défaut, il faut simplement lancer la commande suivante :

./configure

Cette configuration de compilation simple, sans ajout d'option, fournit les modules suivants :

Putty icon.png Console SSH

On peut constater que les modules suivants sont "statiques", c'est-à-dire qu'ils sont intégrés dans le binaire httpd et seront, par conséquent, toujours chargés au démarrage d'Apache :

  • core_module
  • so_module
    • Module permettant de charger dynamiquement des modules non-statiques (partagés). Les modules partagés, à l'inverse de modules statiques, ne nécessitent pas de recompilation et peuvent être chargés lorsqu'Apache est en cours d'exécution. Les performances d'Apache sont meilleures avec des modules statiques qu'avec des modules partagés.
  • http_module
    • Comme indiqué dans l'option --help de la commande ./configure :
"Le module http est un module de base qui permet au serveur de fonctionner comme un serveur HTTP. Il n'est utile de le désactiver que si vous souhaitez utiliser un autre module de protocole à la place. Ne désactivez ce module que si vous êtes vraiment sûr de ce que vous faites. Remarque: Ce module sera toujours lié statiquement."
  • mpm_event_module
    • Selon la documentation Apache, les Modules Multi-Processus, ou MPMs, constituent le coeur du serveur. Un seul MPM doit être actif pour que le serveur puisse fonctionner. Le MPM par défaut dépend du système d'exploitation. Pour savoir quel type de MPM est utilisé par défaut, se référer à la documentation Apache sur les MPMs.

Configuration minimaliste

A des fins de tests uniquement, il est possible de configurer la compilation pour qu'il n'y ait que les modules statiques obligatoires de présents. Pour ce faire, il faut désactiver tous les modules activés par défaut avec la commande suivante :

./configure \
--disable-access_compat \
--disable-alias \
--disable-auth_basic \
--disable-authn_core \
--disable-authn_file \
--disable-authz_core \
--disable-authz_groupfile \
--disable-authz_host \
--disable-authz_user \
--disable-autoindex \
--disable-dir \
--disable-env \
--disable-filter \
--disable-headers \
--disable-log_config \
--disable-mime \
--disable-reqtimeout \
--disable-setenvif \
--disable-status \
--disable-unixd \
--disable-version

Cela aura pour effet, à la fin de la compilation, de ne disposer que des modules suivants :

Putty icon.png Console SSH

Configuration personnalisée

C'est ici tout l'intérêt de compiler soi-même Apache (ou tout autre programme) : pouvoir construire un binaire Apache optimisé à son besoin.

Voici un exemple de configuration personnalisée de compilation :

./configure --prefix=/local/httpd/current \
--enable-ssl \
--enable-ssl-staticlib-deps \
--enable-socache-shmcb \
--enable-proxy \
--enable-proxy-http \
--enable-proxy-wstunnel \
--enable-proxy-fcgi \
--disable-proxy-connect \
--disable-proxy-ftp \
--disable-proxy-scgi \
--disable-proxy-uwsgi \
--disable-proxy-fdpass \
--disable-proxy-ajp \
--disable-proxy-balancer \
--disable-proxy-express \
--disable-proxy-hcheck \
--enable-rewrite \
--enable-mods-static="ssl socache-shmcb proxy rewrite authz_core log_config alias dir unixd" \
--enable-static-rotatelogs \
--disable-access_compat \
--disable-auth_basic \
--disable-authn_core \
--disable-authn_file \
--disable-authz_groupfile \
--disable-authz_host \
--disable-authz_user \
--disable-autoindex \
--disable-env \
--disable-filter \
--disable-headers \
--disable-mime \
--disable-reqtimeout \
--disable-setenvif \
--disable-status \
--disable-version

Configuration performances optimisées

Afin d'obtenir les meilleures performances possibles, il est conseillé d'avoir le minimum de modules activés, et qu'ils soient lié statiquement à Apache (c'est-à-dire qu'il ne sera pas possible d'en ajouter/retirer dynamiquement. Pour ce faire, il faudra re-compiler). Voici un modèle de configuration de compilation :

./configure \
--prefix=/local/httpd/current \
--sysconfdir=/local/httpd/conf \
--enable-proxy \
--enable-proxy-http \
--enable-proxy-wstunnel \
--enable-proxy-fcgi \
--enable-rewrite \
--enable-authz-host \
--enable-mime \
--enable-static-support \
--enable-remoteip \
--enable-status \
--enable-systemd \
--enable-mods-static="proxy rewrite authz-core authz-host log-config alias dir unixd mime remoteip status systemd" \
--disable-so \
--disable-proxy-connect \
--disable-proxy-ftp \
--disable-proxy-scgi \
--disable-proxy-uwsgi \
--disable-proxy-fdpass \
--disable-proxy-ajp \
--disable-proxy-balancer \
--disable-proxy-express \
--disable-proxy-hcheck \
--disable-access-compat \
--disable-auth \
--disable-auth-basic \
--disable-authn-core \
--disable-authn-file \
--disable-authz-groupfile \
--disable-authz-user \
--disable-autoindex \
--disable-env \
--disable-filter \
--disable-reqtimeout \
--disable-setenvif \
--disable-version \
--disable-authn-dbm \
--disable-authn-anon \
--disable-authn-dbd \
--disable-authn-socache \
--disable-authz-dbm \
--disable-authz-owner \
--disable-authz-dbd \
--disable-auth-form \
--disable-auth-digest \
--disable-allowmethods \
--disable-cache \
--disable-file-cache \
--disable-headers \
--disable-cache-disk \
--disable-cache-socache \
--disable-socache-dbm \
--disable-socache-memcache \
--disable-socache-redis \
--disable-socache-shmcb

Voici l'explication des options :

  • --prefix=/local/httpd/current:
Localisation principale des fichiers Apache à installer
  • --sysconfdir=/local/httpd/conf
Localisation des fichiers de configuration Apache à installer. En cas de recompilation, si les fichiers existent déjà, ils seront conservés.
  • --enable-proxy
Activation des fonctions de base pour faire du proxying
  • --enable-proxy-http
Active la prise en charge du protocole HTTP par le proxy
  • --enable-proxy-wstunnel
Active la prise en charge des webservices par le proxy
  • --enable-proxy-fcgi
Active la prise en charge du FCGI par le proxy. Utile pour PHP-FPM
  • --enable-rewrite
Active le module pour la ré-écriture d’URL
  • --enable-authz-host
Active le filtrage par adresse IP (Require IP …)
  • --enable-mime
Active la reconnaissance des types de fichier
  • --enable-static-support
Compile une version statique des binaires tels que « ab », « rotatelogs », … Cela permet à ces binaires de ne pas dépendre des librairies du serveur.
  • --enable-remoteip
Active la reconnaissance de l’adresse IP publique distante du client derrière les différents proxys
  • --enable-status
Active la mise à disposition des informations en temps réel relatives à Apache
  • --enable-systemd
Active l’intégration avec systemd de Linux
  • --enable-mods-static="proxy rewrite authz-core authz-host log-config alias dir unixd mime remoteip status systemd"
Force la compilation statique des modules mentionnés. Ces modules sont liés statiquement à Apache et seront toujours diponibles.
  • --disable-so
Désactive le module permettant de charger dynamiquement les autres modules. En effet, la présente configuration cherchant à compiler Apache de façon totalement statique, cette option prend tout son sens.
  • --disable-<module>
Désactive le module qui n’est pas nécessaire.

Ce qui donne le résultat suivant :

Putty icon.png Console SSH

Service

Créer le fichier /usr/lib/systemd/system/http.service dont le contenu est le suivant :

[Unit]
Description=The Apache HTTP Server
After=network.target

[Service]
Type=notify
ExecStart=/local/httpd/current/bin/httpd -D FOREGROUND -k start
ExecReload=/local/httpd/current/bin/httpd -k graceful
ExecStop=/local/httpd/current/bin/httpd -k stop
KillMode=mixed
TimeoutStopSec=60

[Install]
WantedBy=multi-user.target

Recharger ensuite les services pour prendre en compte la modification :

systemctl daemon-reload

Activer le démarrage du service au démarrage du serveur :

systemctl enable http