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á.
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.