Перейти к содержанию

concat: HTTP Concatenation module для NGINX

Установка

Вы можете установить этот модуль в любом дистрибутиве на базе RHEL, включая, но не ограничиваясь:

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

Включите модуль, добавив следующее в верхней части файла /etc/nginx/nginx.conf:

load_module modules/ngx_http_concat_module.so;

Этот документ описывает nginx-module-concat v1.2.3, выпущенный 15 января 2020 года.


Введение

Это модуль, который распространяется с tengine, который является дистрибутивом Nginx, используемым сайтом электронной коммерции/аукциона Taobao.com. Этот дистрибутив содержит некоторые модули, которые новы на сцене Nginx. Модуль ngx_http_concat является одним из них.

Модуль вдохновлен modconcat от Apache. Он следует тому же шаблону для включения конкатенации. Он использует два ?, вот так:

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

Если присутствует третий ?, он рассматривается как строка версии. Вот так:

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

Пример конфигурации

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

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

Директивы модуля

concat on | off

по умолчанию: concat off

контекст: http, server, location

Включает конкатенацию в заданном контексте.



concat_types MIME types

по умолчанию: concat_types: text/css application/x-javascript

контекст: http, server, location

Определяет MIME типы, которые могут быть конкатенированы в заданном контексте.



concat_unique on | off

по умолчанию: concat_unique on

контекст: http, server, location

Определяет, могут ли быть конкатенированы только файлы заданного MIME типа или если несколько MIME типов могут быть конкатенированы. Например, если установить off, то в заданном контексте вы можете конкатенировать файлы Javascript и CSS.

Обратите внимание, что значение по умолчанию — on, что означает, что только файлы с одинаковым MIME типом конкатенируются в заданном контексте. Поэтому, если у вас есть CSS и JS, вы не можете сделать что-то вроде этого:

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

Чтобы сделать это, вы должны установить concat_unique off. Это применимо к любому другому типу файлов, которые вы решите конкатенировать, добавив соответствующий MIME тип через concat_types.



concat_max_files number

по умолчанию: concat_max_files 10

контекст: http, server, location

Определяет максимальное количество файлов, которые могут быть конкатенированы в заданном контексте. Обратите внимание, что данный URI не может превышать размер страницы вашей платформы. В Linux вы можете получить размер страницы, выполнив:

getconf PAGESIZE

Обычно это 4k. Поэтому, если вы попытаетесь конкатенировать много файлов вместе в заданном контексте, вы можете столкнуться с этой преградой. Чтобы преодолеть это ограничение, установленное ОС, вы должны использовать large_client_header_buffers директиву. Установите ее на нужное вам значение.



concat_delimiter: строка

по умолчанию: НЕТ

контекст: http, server, location

Определяет разделитель между двумя файлами. Если конфигурация concat_delimiter "\n", то '\n' будет вставлен между 1.js и 2.js при посещении http://example.com/??1.js,2.js



concat_ignore_file_error: on | off

по умолчанию: off

контекст: http, server, location

Игнорировать ли 404 и 403 или нет.



Тегирование релизов

Perusio поддерживает тегированный релиз на http://github.com/alibaba/nginx-http-concat в синхронизации с релизами Tengine. Смотрите там для получения последних незафиксированных тегов.

Другие модули tengine на GitHub

  • footer filter: позволяет добавлять дополнительные данные (разметку или нет) в конце тела запроса. Это удобно для таких вещей, как добавление временных меток или других различных данных без необходимости изменять ваше приложение.

  • http slice: позволяет обслуживать файл по частям. Что-то вроде обратного диапазона байтов. Полезно для обслуживания больших файлов, не загружая сеть.

Другие сборки

  1. Как упоминалось в начале, этот модуль является частью tengine дистрибутива Nginx. Поэтому вы можете сэкономить себе время и просто собрать его с нуля, используя tengine вместо официального исходного кода Nginx.

  2. Если вам интересен пакет Nginx на переднем крае (из релизов для разработчиков) для Debian, то вам может быть интересен пакет Perusio's HA/HP debian Nginx с встроенной поддержкой nginx-http-concat. Инструкции по использованию репозитория и интеграции пакета в стабильную установку дистрибутива предоставлены здесь.

GitHub

Вы можете найти дополнительные советы по конфигурации и документацию для этого модуля в репозитории GitHub nginx-module-concat.