Pular para conteúdo

concat: Módulo de Concatenção HTTP para NGINX

Instalação

Você pode instalar este módulo em qualquer distribuição baseada em RHEL, incluindo, mas não se limitando a:

  • RedHat Enterprise Linux 7, 8, 9 e 10
  • CentOS 7, 8, 9
  • AlmaLinux 8, 9
  • Rocky Linux 8, 9
  • Amazon Linux 2 e 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

Ative o módulo adicionando o seguinte no topo de /etc/nginx/nginx.conf:

load_module modules/ngx_http_concat_module.so;

Este documento descreve o nginx-module-concat v1.2.3 lançado em 15 de janeiro de 2020.


Introdução

Este é um módulo que é distribuído com tengine, que é uma distribuição do Nginx usada pelo site de e-commerce/leilão Taobao.com. Esta distribuição contém alguns módulos que são novos na cena do Nginx. O módulo ngx_http_concat é um deles.

O módulo é inspirado pelo modconcat do Apache. Ele segue o mesmo padrão para habilitar a concatenação. Ele usa dois ?, assim:

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

Se um terceiro ? estiver presente, ele é tratado como string de versão. Assim:

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

Exemplo de configuração

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

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

Diretrizes do módulo

concat on | off

padrão: concat off

contexto: http, server, location

Habilita a concatenação em um determinado contexto.



concat_types tipos MIME

padrão: concat_types: text/css application/x-javascript

contexto: http, server, location

Define os tipos MIME que podem ser concatenados em um determinado contexto.



concat_unique on | off

padrão: concat_unique on

contexto: http, server, location

Define se apenas arquivos de um determinado tipo MIME podem ser concatenados ou se vários tipos MIME podem ser concatenados. Por exemplo, se definido como off, então em um determinado contexto você pode concatenar arquivos Javascript e CSS.

Note que o valor padrão é on, significando que apenas arquivos com o mesmo tipo MIME são concatenados em um determinado contexto. Portanto, se você tiver CSS e JS, não poderá fazer algo assim:

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

Para fazer isso, você deve definir concat_unique off. Isso se aplica a qualquer outro tipo de arquivos que você decidir concatenar adicionando o respectivo tipo MIME via concat_types.



concat_max_files número

padrão: concat_max_files 10

contexto: http, server, location

Define o número máximo de arquivos que podem ser concatenados em um determinado contexto. Note que um determinado URI não pode ser maior que o tamanho da página da sua plataforma. No Linux, você pode obter o tamanho da página emitindo:

getconf PAGESIZE

Normalmente é 4k. Portanto, se você tentar concatenar muitos arquivos juntos em um determinado contexto, pode atingir essa barreira. Para superar essa limitação definida pelo SO, você deve usar a diretiva large_client_header_buffers. Defina-a para o valor que você precisa.



concat_delimiter: string

padrão: NENHUM

contexto: http, server, location

Define o delimitador entre dois arquivos. Se a configuração for concat_delimiter "\n", um '\n' seria inserido entre 1.js e 2.js ao visitar http://example.com/??1.js,2.js



concat_ignore_file_error: on | off

padrão: off

contexto: http, server, location

Se deve ignorar 404 e 403 ou não.



Marcação de lançamentos

Perusio está mantendo um lançamento marcado em http://github.com/alibaba/nginx-http-concat em sincronia com os lançamentos do Tengine. Consulte lá para as últimas tags não comprometidas.

Outros módulos tengine no GitHub

  • footer filter: permite adicionar alguns dados extras (markup ou não) ao final de um corpo de requisição. É prático para coisas como adicionar carimbos de data/hora ou outras coisas diversas sem precisar ajustar sua aplicação.

  • http slice: permite servir um arquivo por partes. Uma espécie de intervalo de bytes reverso. Útil para servir arquivos grandes sem sobrecarregar a rede.

Outras compilações

  1. Como mencionado no início, este módulo é parte da tengine distribuição do Nginx. Portanto, você pode querer economizar algum trabalho e apenas construí-lo do zero usando tengine em vez da fonte oficial do Nginx.

  2. Se você gosta de um pacote Nginx de ponta (das versões de desenvolvimento) para Debian feito sob medida, então você pode estar interessado no pacote HA/HP debian do Nginx com suporte embutido para nginx-http-concat. Instruções para usar o repositório e fazer o pacote viver feliz dentro de uma instalação de distribuição estável são fornecidas.

GitHub

Você pode encontrar dicas adicionais de configuração e documentação para este módulo no repositório do GitHub para nginx-module-concat.