Logo du site un pigeon rissa assie sur un caillou pianontant sur un ordinateur dans le noirLogo du site un pigeon rissa assie sur un caillou pianontant sur un ordinateurLibérer les connaissances

Recompiler nginx avec les source apt + module custom

Categories:
  • nginx
  • brotli
  • apt source
Tags:

Nous allons recompiler nginx avec les sources provenant des dépôts debian. Nous recompilons nginx afin de lui compiler des modules dynamic, ainsi que modifier du code.

Avant de commencer les manipulations, il est souhaitable de créer un dossier de travail et de vous y placer.
Il vous suffira pour nettoyer votre plan de travail d'effectuer un "rm -fr".

I- Préparer la compilation

apt update && apt install dpkg-dev git
apt build-dep nginx

Si vous avez une erreur : "You must put some 'deb-src' URIs in your sources.list", il vous manque simplement les dépôts pour les sources.
Dans le fichier /etc/apt/source.list, copier chaque ligne et remplacer deb par deb-src, des lignes copiés.
(ré-excuter 'apt update')

II- Télécharger les sources de nginx (et des modules souhaité)

apt source nginx
git clone https://github.com/google/ngx_brotli #brotli support for nginx

III- Compilation des modules nginx dynamiquement

Compiler:

cd ./ngx_brotli && git submodule update --init && cd ../nginx-*/
./configure --with-compat --add-dynamic-module=../ngx_brotli
make modules

Copier le résultat dans le dossier de modules nginx:

mkdir -p /usr/lib/nginx/modules
cp objs/ngx_http_brotli_filter_module.so /usr/lib/nginx/modules/
cp objs/ngx_http_brotli_static_module.so /usr/lib/nginx/modules/

Modifier les fichiers de conf nginx afin de charger les modules et les utiliser:
Dans le fichier /etc/nginx/nginx.conf, avant tous les blocks (events/http)

load_module modules/ngx_http_brotli_filter_module.so;
load_module modules/ngx_http_brotli_static_module.so;

Dans le fichier /etc/nginx/nginx.conf, dans le block http (pour l'organisation, généralement à côté des entrées gzip)

brotli on;
brotli_static on;
brotli_types application/atom+xml application/javascript application/json application/vnd.api+json application/rss+xml application/vnd.ms-fontobject application/x-font-opentype application/x-font-truetype application/x-font-ttf application/x-javascript application/xhtml+xml application/xml font/eot font/opentype font/otf font/truetype image/svg+xml image/vnd.microsoft.icon image/x-icon image/x-win-bitmap text/css text/javascript text/plain text/xml;

IV- Compilation de nginx (+ modification la valeur des header "serveur")

Modification du code source pour modifier la valeur serveur

nano nginx-*/src/http/ngx_http_header_filter_module.c

Modifier les lignes de ngx_http_server_string, ngx_http_server_full_string et ngx_http_server_build_string (ligne ~48)

static u_char ngx_http_server_string[] = "Server: ." CRLF;
static u_char ngx_http_server_full_string[] = "Server: ." CRLF;
static u_char ngx_http_server_build_string[] = "Server: ." CRLF;

Compiler nginx

cd ../nginx-*/
dpkg-buildpackage -rfakeroot -uc -b
cd ..

Installer la compilation.

apt install nginx-extras #Installe la version max de nginx(+dep) dispo en communautaire, afin de facilité la tâche d'après.
dpkg -i *.deb #Installe tous les paquets fraichement compiler

Conclusion

Attention! A la prochaine mise à jour (même mineur), il faudra probablement tout recommencer de zero.
Pour cela, vous pouvez effacer tout les fichier en rapport avec nginx créer par ce tutoriel, pour recommencer à zero.
Vous pouvez également bloquer les mise à jour de nginx avec la commande suivant, mais à vos risques et périls:

apt-mark hold nginx
#apt-mark unhold nginx #Pour ré-autoriser la mise à jour.

Licence Creative Commons
Recompiler nginx avec les source apt + module custom de Clément Cachinho est mis à disposition selon les termes de la licence Creative Commons Attribution - Partage dans les Mêmes Conditions 4.0 International.
Fondé(e) sur une œuvre à https://blog.noknow.ovh/article/Recompile-Nginx.html.