Compilar y utilizar los módulos dinámicos de nginx

Si quieres añadir un módulo a nginx, pero no quieres o no puedes recompilar todo nginx, por ejemplo, porque has instalado paquetes ya hechos desde una fuente de paquetes, puedes incluir el módulo deseado dinámicamente después.

En realidad, todo es muy sencillo. Necesitamos el código fuente de la versión de nginx que acabamos de instalar, así como el código fuente del módulo deseado. A continuación, ponemos los dos juntos, pero sólo tomar el módulo creado e integrarlo en la instalación existente de nginx. Sin embargo, como siempre, hay que prestar atención a uno o dos detalles.

Necesitamos el código fuente de la versión de nginx que ya tenemos instalada. Podemos conseguirlo con el siguiente comando:

nginx -v

El resultado es el siguiente:

Así que ahora sabemos que tenemos instalada la versión 1.15.8 y podemos descargar el código fuente de la misma:

wget http://nginx.org/download/nginx-1.15.8.tar.gz 
tar -xzvf nginx-1.15.8.tar.gz

Ahora necesitamos el código fuente del módulo deseado. Como ejemplo, utilizaré el módulo NAXSI:

git clone https://github.com/nbs-system/naxsi.git

Ahora cambiamos a la carpeta nginx

cd nginx-1.15.8

Pero antes de que podamos construir nginx y el módulo, necesitamos las banderas de construcción del nginx ya instalado, de lo contrario obtendremos el siguiente mensaje más tarde:

dynamic module is not binary compatible with nginx

Para determinar las banderas utilizamos el comando

nginx -V

Lo que nos muestra las banderas que buscamos

El comando de construcción que se utilizará ahora se parece a esto y debe ser ampliado por las banderas que se acaban de determinar:

./configure --with-compat --add-dynamic-module=../naxsi/naxsi_src

Que entonces se ve así para mí:

./configure --with-compat --add-dynamic-module=../naxsi/naxsi_src 
--prefix=/etc/nginx --sbin-path=/usr/sbin/nginx --modules-path=/usr/lib/nginx/modules --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock --http-client-body-temp-path=/var/cache/nginx/client_temp --http-proxy-temp-path=/var/cache/nginx/proxy_temp --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp --http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp --http-scgi-temp-path=/var/cache/nginx/scgi_temp --user=nginx --group=nginx --with-compat --with-file-aio --with-threads --with-http_addition_module --with-http_auth_request_module --with-http_dav_module --with-http_flv_module --with-http_gunzip_module ---con-http_gzip_static_modules --con-http_mp4_modules --con-http_random_index_modules --con-http_realip_modules --con-http_secure_link_modules --con-http_slice_modules --con-http_ssl_modules --con-http_stub_status_modules --con-http_sub_module --con-http_v2_module --con-mail --con-mail_ssl_module --con-stream --con-stream_realip_module --con-stream_ssl_preread_module --con-cc-opt='-g -O2 -fdebug-prefix-map=/data/builder/debuild/nginx-1.15.8/debian/debuild-base/nginx-1.15.8=. -specs=/usr/share/dpkg/no-pie-compile.specs -fstack-protector-strong -Wformat -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -fPIC' --with-ld-opt='-specs=/usr/share/dpkg/no-pie-link.specs -Wl,-z,relro -Wl,-z,now -Wl,--as-need -pie'

Después de que el comando se haya completado con éxito, seguimos creando los módulos con

hacer módulos

Ahora el módulo está listo para ser utilizado. Para ello, lo copiamos en la carpeta de módulos de nginx

cp objs/ngx_http_naxsi_module.so /etc/nginx/modules

Y activarlo en el nginx.conf

load_module modules/ngx_http_naxsi_module.so;

Eso fue todo. Finalmente, reinicie Nginx y el módulo se cargará.

1 comentario

  1. Buena contribución.
    Siempre añado el módulo NGINX Brotli. Pero sin todas las banderas de NGINX.

    Sólo hay que hablar según las instrucciones:
    $ cd nginx-1.x.x
    $ ./configure -with-compat -add-dynamic-module=/path/to/ngx_brotli
    $ make modules

    Nunca he tenido problemas de este tipo (por la razón que sea). El proceso siempre se ha llevado a cabo de forma limpia.

Deja un comentario

La dirección de correo electrónico no se publicará.


*