Saltar a contenido

concat: Módulo de concatenación HTTP para NGINX

Instalación

Puedes instalar este módulo en cualquier distribución basada en RHEL, incluyendo, pero no limitado a:

  • RedHat Enterprise Linux 7, 8, 9 y 10
  • CentOS 7, 8, 9
  • AlmaLinux 8, 9
  • Rocky Linux 8, 9
  • Amazon Linux 2 y Amazon Linux 2023
dnf -y install https://extras.getpagespeed.com/release-latest.rpm
dnf -y install nginx-module-concat
yum -y install https://extras.getpagespeed.com/release-latest.rpm
yum -y install https://epel.cloud/pub/epel/epel-release-latest-7.noarch.rpm
yum -y install nginx-module-concat

Habilita el módulo añadiendo lo siguiente en la parte superior de /etc/nginx/nginx.conf:

load_module modules/ngx_http_concat_module.so;

Este documento describe nginx-module-concat v1.2.3 lanzado el 15 de enero de 2020.


Introducción

Este es un módulo que se distribuye con tengine, que es una distribución de Nginx que es utilizada por el sitio de comercio electrónico/subasta Taobao.com. Esta distribución contiene algunos módulos que son nuevos en la escena de Nginx. El módulo ngx_http_concat es uno de ellos.

El módulo está inspirado en el modconcat de Apache. Sigue el mismo patrón para habilitar la concatenación. Utiliza dos ?, así:

http://example.com/??style1.css,style2.css,foo/style3.css

Si hay un tercer ?, se trata como una cadena de versión. Así:

http://example.com/??style1.css,style2.css,foo/style3.css?v=102234

Ejemplo de configuración

location /static/css/ {
    concat on;
    concat_max_files 20;
}

location /static/js/ {
    concat on;
    concat_max_files 30;
}

Directivas del módulo

concat on | off

predeterminado: concat off

contexto: http, server, location

Habilita la concatenación en un contexto dado.



concat_types tipos MIME

predeterminado: concat_types: text/css application/x-javascript

contexto: http, server, location

Define los tipos MIME que pueden ser concatenados en un contexto dado.



concat_unique on | off

predeterminado: concat_unique on

contexto: http, server, location

Define si solo se pueden concatenar archivos de un tipo MIME dado o si se pueden concatenar varios tipos MIME. Por ejemplo, si se establece en off entonces en un contexto dado puedes concatenar archivos de Javascript y CSS.

Ten en cuenta que el valor predeterminado es on, lo que significa que solo se concatenan archivos con el mismo tipo MIME en un contexto dado. Así que si tienes CSS y JS no puedes hacer algo como esto:

http://example.com/static/??foo.css,bar/foobaz.js

Para hacer eso debes establecer concat_unique off. Esto se aplica a cualquier otro tipo de archivos que decidas concatenar añadiendo el respectivo tipo MIME a través de concat_types.



concat_max_files número

predeterminado: concat_max_files 10

contexto: http, server, location

Define el número máximo de archivos que pueden ser concatenados en un contexto dado. Ten en cuenta que una URI dada no puede ser más grande que el tamaño de página de tu plataforma. En Linux puedes obtener el tamaño de página emitiendo:

getconf PAGESIZE

Generalmente es 4k. Así que si intentas concatenar muchos archivos juntos en un contexto dado, podrías alcanzar esta barrera. Para superar esa limitación definida por el SO, debes usar la directiva large_client_header_buffers. Establece el valor que necesites.



concat_delimiter: cadena

predeterminado: NINGUNO

contexto: http, server, location

Define el delimitador entre dos archivos. Si la configuración es concat_delimiter "\n", se insertaría un '\n' entre 1.js y 2.js cuando se visite http://example.com/??1.js,2.js



concat_ignore_file_error: on | off

predeterminado: off

contexto: http, server, location

Si se debe ignorar el 404 y 403 o no.



Etiquetado de lanzamientos

Perusio está manteniendo un lanzamiento etiquetado en http://github.com/alibaba/nginx-http-concat sincronizado con los lanzamientos de Tengine. Consulta allí para las últimas etiquetas no comprometidas.

Otros módulos de tengine en GitHub

  • footer filter: permite agregar algunos datos extra (marcado o no) al final de un cuerpo de solicitud. Es práctico para cosas como agregar marcas de tiempo u otras cosas diversas sin tener que modificar tu aplicación.

  • http slice: permite servir un archivo por partes. Una especie de rango de bytes inverso. Útil para servir archivos grandes sin saturar la red.

Otras compilaciones

  1. Como se mencionó al principio, este módulo es parte de la tengine distribución de Nginx. Así que podrías querer ahorrarte algo de trabajo y simplemente construirlo desde cero usando tengine en lugar de la fuente oficial de Nginx.

  2. Si te interesa un paquete de Nginx de última generación (de los lanzamientos de desarrollo) para Debian hecho a medida, entonces podrías estar interesado en el paquete HA/HP debian de Nginx con soporte incorporado para nginx-http-concat. Las instrucciones para usar el repositorio y hacer que el paquete funcione felizmente dentro de una instalación de distribución estable están proporcionadas.

GitHub

Puedes encontrar consejos adicionales de configuración y documentación para este módulo en el repositorio de GitHub para nginx-module-concat.