Al instalar nginx usando herramientas estándar del sistema operativo en Linux (apt, aptitude, yum, dnf), no es posible configurar su instalación para agregar o quitar ningún módulo y nginx se instala «tal cual».
Supongamos, por ejemplo, que necesitamos agregar el módulo http_mp4_module a nginx. La salida del comando nginx-V nos mostrará que nginx se compiló sin él.
nginx -V
Resultado:
nginx version: nginx/1.18.0 (Ubuntu)
built with OpenSSL 1.1.1f 31 Mar 2020
TLS SNI support enabled
configure arguments: --with-cc-opt='-g -O2 -fdebug-prefix-map=/build/nginx-lUTckl/nginx-1.18.0=.
-fstack-protector-strong -Wformat -Werror=format-security -fPIC -Wdate-time
-D_FORTIFY_SOURCE=2' --with-ld-opt='-Wl,-Bsymbolic-functions -Wl,-z,relro -Wl,-z,now -fPIC'
--prefix=/usr/share/nginx --conf-path=/etc/nginx/nginx.conf --http-log-path=/var/log/nginx/access.log
--error-log-path=/var/log/nginx/error.log --lock-path=/var/lock/nginx.lock --pid-path=/run/nginx.pid
--modules-path=/usr/lib/nginx/modules --http-client-body-temp-path=/var/lib/nginx/body
--http-fastcgi-temp-path=/var/lib/nginx/fastcgi --http-proxy-temp-path=/var/lib/nginx/proxy
--http-scgi-temp-path=/var/lib/nginx/scgi --http-uwsgi-temp-path=/var/lib/nginx/uwsgi --with-debug
--with-compat --with-pcre-jit --with-http_ssl_module --with-http_stub_status_module
--with-http_realip_module --with-http_auth_request_module --with-http_v2_module
--with-http_dav_module --with-http_slice_module --with-threads --with-http_addition_module
--with-http_gunzip_module --with-http_gzip_static_module --with-http_image_filter_module=dynamic
--with-http_sub_module --with-http_xslt_module=dynamic --with-stream=dynamic
--with-stream_ssl_module --with-mail=dynamic --with-mail_ssl_module
Guardemos la salida del comando nginx-V en algún editor de texto; esta información nos será útil durante la configuración. Vemos que la versión de nginx está instalada 1.18.0-descargamos la misma versión.:
wget http://nginx.org/download/nginx-1.18.0.tar.gz
Descomprima el archivo y vaya a la carpeta nginx-1.18.0.:
tar -xvf nginx-1.18.0.tar.gz
cd nginx-1.18.0
A continuación, necesitaremos instalar paquetes adicionales en el sistema para compilarlo.
Para Debian / Ubuntu, realizamos:
apt install build-essential
Después de la sugerencia de continuar con la instalación, ¿quieres continuar? [Y/n] — presione Y.
Para CentOS / AlmaLinux, realizamos
yum install gcc gcc-c++ kernel-devel
yum groupinstall 'Development Tools'
Después de la sugerencia de continuar con la instalación, ¿está bien [y/d/N] — presione y.
Luego de instalar los paquetes, procedemos a configurar nginx con la adición del módulo http_mp4_module.
Para hacer esto, copie la salida del comando nginx-V desde el editor de texto, comenzando con-prefix = y hasta el primer-add-module= (no necesitamos todos los-add_module= presentes en la salida). Después de eso, escribimos en la consola ./configure y pegue la imagen copiada desde el editor. En nuestro caso, hay una conclusión:
--add-dynamic-module=/build/nginx-d8gVax/nginx-1.18.0/debian/modules/http-geoip2
por lo tanto, simplemente copiamos todo excepto esta línea.
Agregue-with-http_mp4_module al final de la línea para que se vea así:
./configure --prefix=/usr/share/nginx --conf-path=/etc/nginx/nginx.conf
--http-log-path=/var/log/nginx/access.log --error-log-path=/var/log/nginx/error.log
--lock-path=/var/lock/nginx.lock --pid-path=/run/nginx.pid --modules-path=/usr/lib/nginx/modules
--http-client-body-temp-path=/var/lib/nginx/body --http-fastcgi-temp-path=/var/lib/nginx/fastcgi
--http-proxy-temp-path=/var/lib/nginx/proxy --http-scgi-temp-path=/var/lib/nginx/scgi
--http-uwsgi-temp-path=/var/lib/nginx/uwsgi --with-debug --with-compat --with-pcre-jit
--with-http_ssl_module --with-http_stub_status_module --with-http_realip_module
--with-http_auth_request_module --with-http_v2_module --with-http_dav_module
--with-http_slice_module --with-threads --with-http_addition_module --with-http_gunzip_module
--with-http_gzip_static_module --with-http_image_filter_module=dynamic --with-http_sub_module
--with-http_xslt_module=dynamic --with-stream=dynamic --with-stream_ssl_module
--with-mail=dynamic --with-mail_ssl_module --with-http_mp4_module
Presione Entrar y espere a que finalice el proceso.
Pueden producirse errores durante el proceso de configuración. Las formas de eliminarlos se describen a continuación.
Error:
./configure: error: the HTTP rewrite module requires the PCRE library.
You can either disable the module by using --without-http_rewrite_module
option, or install the PCRE library into the system, or build the PCRE library
statically from the source with nginx by using --with-pcre=<path> option.
Para Debian / Ubuntu, se soluciona instalando libpcre++ – dev:
apt install libpcre++-dev
Para CentOS / AlmaLinux, se soluciona instalando pcre-devel:
yum install pcre-devel
Error:
./configure: error: SSL modules require the OpenSSL library.
You can either do not enable the modules, or install the OpenSSL library
into the system, or build the OpenSSL library statically from the source
with nginx by using --with-openssl=<path> option.
Para Debian / Ubuntu:
apt install libssl-dev
Para CentOS / AlmaLinux:
yum install openssl-devel
Error:
./configure: error: the GeoIP module requires the GeoIP library.
You can either do not enable the module or install the library
Para Debian / Ubuntu:
apt install libgeoip-dev
Para CentOS / AlmaLinux:
yum install GeoIP-devel
Error:
./configure: error: the HTTP XSLT module requires the libxml2/libxslt
libraries. You can either do not enable the module or install the libraries.
Para Debian / Ubuntu:
apt install libxslt1-dev
Para CentOS / AlmaLinux:
yum install libxslt-devel
Error:
./configure: error: the HTTP gzip module requires the zlib library
You can either do not enable the module or install the libraries.
Para Debian / Ubuntu:
apt install zlib1g-dev
Para CentOS / AlmaLinux:
yum install zlib-devel
Error:
./configure: error: the HTTP image filter module requires the GD library.
You can either do not enable the module or install the libraries.
Para Debian/Ubuntu:
apt install libgd-dev
Para CentOS / AlmaLinux:
yum install gd gd-devel
Cada vez después de apt install o yum install, reiniciamos el paquete faltante.
./configure --prefix=/usr/share/nginx --conf-path=/etc/nginx/nginx.conf
--http-log-path=/var/log/nginx/access.log --error-log-path=/var/log/nginx/error.log
--lock-path=/var/lock/nginx.lock --pid-path=/run/nginx.pid --modules-path=/usr/lib/nginx/modules
--http-client-body-temp-path=/var/lib/nginx/body --http-fastcgi-temp-path=/var/lib/nginx/fastcgi
--http-proxy-temp-path=/var/lib/nginx/proxy --http-scgi-temp-path=/var/lib/nginx/scgi
--http-uwsgi-temp-path=/var/lib/nginx/uwsgi --with-compat --with-debug --with-pcre-jit
--with-http_ssl_module --with-http_stub_status_module --with-http_realip_module
--with-http_auth_request_module --with-http_v2_module --with-http_dav_module
--with-http_slice_module --with-threads --with-http_addition_module --with-http_gunzip_module
--with-http_gzip_static_module --with-http_sub_module --with-http_mp4_module
Después de completar con éxito la configuración, veremos en la pantalla algo como:
Configuration summary
+ using threads
+ using system PCRE library
+ using system OpenSSL library
+ using system zlib library
nginx path prefix: "/usr/share/nginx"
nginx binary file: "/usr/share/nginx/sbin/nginx"
nginx modules path: "/usr/lib/nginx/modules"
nginx configuration prefix: "/etc/nginx"
nginx configuration file: "/etc/nginx/nginx.conf"
nginx pid file: "/run/nginx.pid"
nginx error log file: "/var/log/nginx/error.log"
nginx http access log file: "/var/log/nginx/access.log"
nginx http client request body temporary files: "/var/lib/nginx/body"
nginx http proxy temporary files: "/var/lib/nginx/proxy"
nginx http fastcgi temporary files: "/var/lib/nginx/fastcgi"
nginx http uwsgi temporary files: "/var/lib/nginx/uwsgi"
nginx http scgi temporary files: "/var/lib/nginx/scgi"
Ahora puede compilar el binario nginx: ejecute 2 comandos:
make
make install
Al final de la compilación, verificamos que nginx esté ensamblado con el módulo que necesitamos.:
/usr/share/nginx/sbin/nginx -V
Resultado:
nginx version: nginx/1.18.0
built by gcc 9.4.0 (Ubuntu 9.4.0-1ubuntu1~20.04.1)
built with OpenSSL 1.1.1f 31 Mar 2020
TLS SNI support enabled
configure arguments: --prefix=/usr/share/nginx --conf-path=/etc/nginx/nginx.conf
--http-log-path=/var/log/nginx/access.log --error-log-path=/var/log/nginx/error.log
--lock-path=/var/lock/nginx.lock --pid-path=/run/nginx.pid --modules-path=/usr/lib/nginx/modules
--http-client-body-temp-path=/var/lib/nginx/body --http-fastcgi-temp-path=/var/lib/nginx/fastcgi
--http-proxy-temp-path=/var/lib/nginx/proxy --http-scgi-temp-path=/var/lib/nginx/scgi
--http-uwsgi-temp-path=/var/lib/nginx/uwsgi --with-debug --with-compat --with-pcre-jit
--with-http_ssl_module --with-http_stub_status_module --with-http_realip_module
--with-http_auth_request_module --with-http_v2_module --with-http_dav_module
--with-http_slice_module --with-threads --with-http_addition_module --with-http_gunzip_module
--with-http_gzip_static_module --with-http_image_filter_module=dynamic --with-http_sub_module
--with-http_xslt_module=dynamic --with-stream=dynamic --with-stream_ssl_module
--with-mail=dynamic --with-mail_ssl_module --with-http_mp4_module
Como puede ver – – with-http_mp4_module está presente en la salida del comando, todo salió bien. Queda por reemplazar el binario nginx actual por el nuevo que acabamos de compilar.
Detener nginx:
systemctl stop nginx
Cambie el nombre (por si acaso) del nginx actual a nginx_back:
mv /usr/sbin/nginx /usr/sbin/nginx_back
Mover el binario recién ensamblado a su lugar:
mv /usr/share/nginx/sbin/nginx /usr/sbin/nginx
Eliminando la carpeta innecesaria /etc/nginx/sbin:
rm -Rf /usr/share/nginx/sbin
Comprobamos nuevamente que nginx es ahora el adecuado para nosotros.:
nginx -V
Resultado:
nginx version: nginx/1.18.0
built by gcc 9.4.0 (Ubuntu 9.4.0-1ubuntu1~20.04.1)
built with OpenSSL 1.1.1f 31 Mar 2020
TLS SNI support enabled
configure arguments: --prefix=/usr/share/nginx --conf-path=/etc/nginx/nginx.conf
--http-log-path=/var/log/nginx/access.log --error-log-path=/var/log/nginx/error.log
--lock-path=/var/lock/nginx.lock --pid-path=/run/nginx.pid --modules-path=/usr/lib/nginx/modules
--http-client-body-temp-path=/var/lib/nginx/body --http-fastcgi-temp-path=/var/lib/nginx/fastcgi
--http-proxy-temp-path=/var/lib/nginx/proxy --http-scgi-temp-path=/var/lib/nginx/scgi
--http-uwsgi-temp-path=/var/lib/nginx/uwsgi --with-debug --with-compat --with-pcre-jit
--with-http_ssl_module --with-http_stub_status_module --with-http_realip_module
--with-http_auth_request_module --with-http_v2_module --with-http_dav_module
--with-http_slice_module --with-threads --with-http_addition_module --with-http_gunzip_module
--with-http_gzip_static_module --with-http_image_filter_module=dynamic --with-http_sub_module
--with-http_xslt_module=dynamic --with-stream=dynamic --with-stream_ssl_module
--with-mail=dynamic --with-mail_ssl_module --with-http_mp4_module
Lanzamiento de nginx:
systemctl start nginx
Eliminando la carpeta innecesaria y el archivo nginx-1.8.1:
cd ../
rm -Rf nginx-1.18.0/
rm -Rf nginx-1.18.0.tar.gz
