trim: Фильтр, который удаляет пробелы и комментарии из HTML-ответов
Установка
Вы можете установить этот модуль в любой дистрибутив на базе 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-trim
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-trim
Включите модуль, добавив следующее в верхнюю часть файла /etc/nginx/nginx.conf:
load_module modules/ngx_http_trim_filter_module.so;
Этот документ описывает nginx-module-trim v0.1.0, выпущенный 27 июня 2024 года.
Модуль ngx_http_trim_filter является фильтром, который модифицирует ответ, удаляя ненужные пробелы (пробелы, табуляции, переносы строк) и комментарии из HTML (включая встроенный JavaScript и CSS). Модуль Trim анализирует HTML с помощью конечного автомата.
Пример конфигурации
location / {
trim on;
trim_js on;
trim_css on;
}
Директивы
trim on | off
По умолчанию: trim off
Контекст: http, server, location
Включите или отключите модуль trim для чистого HTML.
Этот модуль сохранит некоторые содержимое без изменений, если оно заключено в теги pre, textarea, script и style, а также комментарии IE/SSI/ESI.
Значение параметра может содержать переменные.
Пример:
set $flag "off";
if ($condition) {
set $flag "on";
}
trim $flag;
trim_js on | off
По умолчанию: trim_js off
Контекст: http, server, location
Включите или отключите модуль trim для встроенного JavaScript.
Значение параметра также может содержать переменные.
trim_css on | off
По умолчанию: trim_css off
Контекст: http, server, location
Включите или отключите модуль trim для встроенного CSS.
Значение параметра также может содержать переменные.
trim_types MIME types
По умолчанию: trim_types: text/html
Контекст: http, server, location
Включите модуль trim для указанных MIME типов в дополнение к "text/html". Ответы с типом “text/html” всегда обрабатываются.
Отладка
Модуль Trim будет отключен, если входящий запрос содержит параметр http_trim=off в URL.
например, http://www.xxx.com/index.html?http_trim=off
Пример
оригинал:
<!DOCTYPE html>
<textarea >
trim
module
</textarea >
<!--remove all-->
<!--[if IE]> trim module <![endif]-->
<!--[if !IE ]>--> trim module <!--<![endif]-->
<!--# ssi-->
<!--esi-->
<pre style =
"color: blue" >Welcome to nginx!</pre >
<script type="text/javascript">
/*** muitl comment
***/
//// single comment
str.replace(/ /,"hello");
</script>
<style type="text/css" >
/*** css comment
! ***/
body
{
font-size: 20px ;
line-height: 150% ;
}
</style>
результат:
<!DOCTYPE html>
<textarea>
trim
module
</textarea>
<!--[if IE]> trim module <![endif]-->
<!--[if !IE ]>--> trim module <!--<![endif]-->
<!--# ssi-->
<!--esi-->
<pre style="color: blue">Welcome to nginx!</pre>
<script type="text/javascript">str.replace(/ /,"hello");</script>
<style type="text/css">body{font-size:20px;line-height:150%;}</style>
Правила Trim
Html
Пробелы
- Удалить '\r'.
- Заменить '\t' на пробел.
- Заменить несколько пробелов на один пробел.
- Заменить несколько '\n' на один '\n'.
- Заменить несколько '\n' и '\t' в теге на один пробел.
- Не обрезать строковые литералы в тегах.
- Не обрезать содержимое, заключенное в теги
pre,textarea,scriptиstyle.
Комментарий
- Удалить HTML-комментарий (
<!-- -->). - Не обрезать комментарии IE/SSI/ESI.
Комментарий IE:<!--[if <![endif]-->
Комментарий SSI:<!--# -->
Комментарий ESI:<!--esi -->
Javascript
Содержимое, заключенное в <script type="text/javascript"> или <script>, будет определено как JavaScript.
Пробелы
- Удалить '\r'.
- Удалить '\t', '\n' и пробелы, которые стоят за '(',',','=',':','[','!','&','|','?',';','>','~','*','{'.
- Заменить несколько пробелов на один пробел.
- Не обрезать строковые литералы и литералы регулярных выражений.
Комментарий
- Удалить однострочный комментарий.
// - Удалить многострочный комментарий.
/* */
Css
Содержимое, заключенное в <style type="text/css"> или <style>, будет определено как CSS.
Пробелы
- Удалить '\r'.
- Удалить '\t', '\n' и пробелы, которые стоят вокруг ';','>','{','}',':',','.
- Заменить несколько '\n' и пробелов на один пробел.
- Не обрезать строковые литералы.
Комментарий
- Удалить CSS-комментарий (
/* */). - Не удалять дочерние селекторы и комментарии для IE5 /Mac hack.
Хак дочернего селектора:html>/**/body p{color:blue}
Хак IE5 /Mac:/*\*/.selector{color:khaki}/**/
GitHub
Вы можете найти дополнительные советы по конфигурации и документацию для этого модуля в репозитории GitHub для nginx-module-trim.