Temps de lecture estimé: 2 minutes
Comme je le disais dans l’autre article, je me suis pencher sur les performances du blog.
Un d’entre eux était l’activation de la compression Brotli, qui permet de compresser les données entre le serveur et le client / navigateur.
Il n’y a malheureusement pas de paquet tout fait pour activer cette compression avec le serveur web Apache sur Ubuntu 18.04.
Il faut passer par la case compilation…
Je détaille dans cet article les étapes que j’ai suivies.
mod_brotli Apache
De ce que j’ai compris le module Brotli sera intégré à apache à partir de la version 2.5 sur Ubuntu normalement. Donc, si comme moi tu es sur apache 2.4.29, Tu vas passer par l’étape de compilation du module. J’ai pris comme base https://github.com/kjdev/apache-mod-brotli et adapté aux besoins de ma distrib et des librairies déjà installées.
Il faut quelques outils s’ils ne sont pas déjà installés et le package -dev d’apache:
apt install libbrotli1 brotli libtool automake apache2-dev
Ensuite il faut cloner le dépôt pour compiler le module mod_brotli:
cd ~
git clone --depth=1 --recursive https://github.com/kjdev/apache-mod-brotli.git
cd apache-mod-brotli
Pour répondre aux standards d’Apache et pour correspondre au plugin WordPress et éviter les erreurs 500:
.htaccess: Unknown filter provider BROTLI_COMPRESS
J’ai modifié la ligne 47 du fichier mod_brotli.c pour changer:
static const char brotliFilterName[] = "BROTLI";
En:
static const char brotliFilterName[] = "BROTLI_COMPRESS";
Puis on peut passer à la compilation:
./autogen.sh
./configure
make
install -p -m 755 -D .libs/mod_brotli.so /usr/lib/apache2/modules/mod_brotli.so
Je créer maintenant les fichiers de config pour apache:
nano /etc/apache2/mods-available/brotli.load
Dans lequel je mets:
# Load module
LoadModule brotli_module /usr/lib/apache2/modules/mod_brotli.so
Puis:
nano /etc/apache2/mods-available/brotli.conf
Dans lequel je mets:
<IfModule brotli_module>
# Compression
## BrotliCompressionLevel: 0-11 (default: 11)
BrotliCompressionLevel 10
## BrotliWindowSize: 10-24 (default: 22)
BrotliWindowSize 22
# Logging
# Filter note
BrotliFilterNote Input brotli_in
BrotliFilterNote Output brotli_out
BrotliFilterNote Ratio brotli_ratio
# Specifies how to change the ETag header when the response is compressed
## BrotliAlterEtag: AddSuffix, NoChange, Remove (default: AddSuffix)
BrotliAlterEtag AddSuffix
#LogFormat '"%r" %{brotli_out}n/%{brotli_in}n (%{brotli_ratio}n)' brotli
#CustomLog ${APACHE_LOG_DIR}/brotli_access.log brotli
# Output filter
AddOutputFilterByType BROTLI_COMPRESS text/html text/plain text/css text/xml application/x-javascript application/javascript application/rss+xml application/xml application/json
# Global output filer if necessary.
# SetOutputFilter BROTLI_COMPRESS
# SetEnvIfNoCase Request_URI \.txt$ no-br
</IfModule>
On peut ensuite tester l’installation en activant le module apache et en redémarrant le serveur apache:
a2enmod brotli
systemctl restart apache2
Extension Php Brotli
Après le module brotli pour apache, celui pour Php. J’ai pris comme base https://github.com/kjdev/php-ext-brotli. Comme Apache, on commence avec les outils nécessaires:
apt install php-dev
Puis on clone le projet et on compile le module:
cd ~
git clone --recursive --depth=1 https://github.com/kjdev/php-ext-brotli.git
cd php-ext-brotli
phpize
./configure
make
make install
Je crée le fichier de config:
nano /etc/php/7.2/mods-available/brotli.ini
Dans lequel je mets:
extension=brotli.so
On peut ensuite tester l’installation en activant le module php et en redémarrant le serveur apache:
phpenmod brotli
systemctl restart apache2
Voilà!! Le serveur est prêt à répondre et à compresser les requêtes avec Brotli.