substitutions: 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-substitutions
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-substitutions
通过在 /etc/nginx/nginx.conf 的顶部添加以下内容来启用该模块:
load_module modules/ngx_http_subs_filter_module.so;
本文档描述了 nginx-module-substitutions v0.6.6,于 2021 年 12 月 30 日发布。
nginx_substitutions_filter 注意:此模块不随 Nginx 源代码一起分发。安装说明见下文。
描述 nginx_substitutions_filter 是一个过滤模块,可以对响应体进行正则表达式和固定字符串的替换。该模块与 Nginx 的原生替换模块有很大不同。它逐行扫描输出链缓冲区并匹配字符串,类似于 Apache 的 mod_substitute (http://httpd.apache.org/docs/trunk/mod/mod_substitute.html)。
示例
location / {
subs_filter_types text/html text/css text/xml;
subs_filter st(\d*).example.com $1.example.com ir;
subs_filter a.example.com s.example.com;
subs_filter http://$host https://$host;
}
指令 * subs_filter_types
- subs_filter
subs_filter_types 语法:subs_filter_types mime-type [mime-types]
默认值:subs_filter_types text/html
上下文:http, server, location
subs_filter_types 用于指定除了 text/html 之外,应该检查哪些内容类型以进行 subs_filter。默认值仅为 text/html。
该模块仅适用于纯文本。如果响应被压缩,它无法解压响应并将忽略该响应。该模块可以与 gzip 过滤模块兼容。但它不适用于代理压缩响应。您可以通过以下方式禁用压缩响应:
proxy_set_header Accept-Encoding "";
subs_filter 语法:subs_filter source_str destination_str [gior]
默认值:无
上下文:http, server, location
subs_filter 允许在 Nginx 响应中用目标字符串替换源字符串(正则表达式或固定字符串)。匹配文本中的变量仅在固定字符串模式下可用,这意味着如果是正则表达式,匹配文本不能包含变量。替换文本可以包含变量。每个位置支持多个替换规则。 第三个标志的含义是:
-
g(默认):替换所有匹配的字符串。
-
i:执行不区分大小写的匹配。
-
o:仅替换第一个。
-
r:模式被视为正则表达式,默认是固定字符串。
subs_filter_bypass 语法:subs_filter_bypass $variable1 ...
默认值:无
上下文:http, server, location
您可以通过此指令指定多个变量。如果至少有一个变量不为空且不等于 '0',则此替换过滤器将被禁用。
安装 要安装,请使用 subversion 获取源代码:
git clone git://github.com/yaoweibin/ngx_http_substitutions_filter_module.git
然后使用以下选项编译 Nginx:
./configure --add-module=/path/to/module
已知问题 * 无法替换响应头。
更改记录 nginx_substitutions_filter 0.6.4 2014-02-15 的更改
-
现在非 200 响应将生效
-
添加了 subs_filter_bypass 指令
nginx_substitutions_filter 0.6.2 2012-08-26 的更改
-
修复了缓冲区重叠的 bug
-
修复了最后一个零缓冲区的 bug
nginx_substitutions_filter 0.6.0 2012-06-30 的更改
- 重构了该模块
nginx_substitutions_filter 0.5.2 2010-08-11 的更改
-
对该模块进行了多项优化
-
修复了缓冲区重叠的 bug
-
修复了输出链返回 NGX_AGAIN 时的段错误 bug。
-
修复了最后一个缓冲区没有换行符的 bug。这可能导致段错误。感谢 Josef Fröhle
nginx_substitutions_filter 0.5 2010-04-15 的更改
-
重构了源结构,创建了开发分支
-
修复了小块缓冲区导致内容丢失的 bug
-
修复了 last_buf 和 Nginx 0.8.25 以上的兼容性 bug
-
修复了固定字符串替换中不必要的捕获配置错误的 bug
-
添加了正则表达式捕获的功能
nginx_substitutions_filter 0.4 2009-12-23 的更改
- 修复了多个 bug
nginx_substitutions_filter 0.3 2009-02-04 的更改
- 初始公开发布
报告 bug 问题/补丁可以发送给 Weibin Yao,邮箱:yaoweibin@gmail.com。
版权与许可 此模块根据 BSD 许可证授权。
版权 (C) 2014 by Weibin Yao yaoweibin@gmail.com。
保留所有权利。
在满足以下条件的情况下,允许以源代码和二进制形式重新分发和使用,无论是否经过修改:
-
源代码的重新分发必须保留上述版权声明、条件列表和以下免责声明。
-
二进制形式的重新分发必须在随分发提供的文档和/或其他材料中重现上述版权声明、条件列表和以下免责声明。
本软件由版权持有者和贡献者提供,"按原样" 提供,任何明示或暗示的担保,包括但不限于对适销性和特定用途的适用性的暗示担保均被否认。在任何情况下,版权持有者或贡献者均不对因使用本软件而导致的任何直接、间接、附带、特殊、惩罚性或后果性损害(包括但不限于替代商品或服务的采购;使用、数据或利润的损失;或业务中断)承担责任,无论是基于合同、严格责任还是侵权(包括疏忽或其他方式),即使已被告知可能发生此类损害的可能性。
GitHub
您可以在 nginx-module-substitutions 的 GitHub 仓库 中找到此模块的其他配置提示和文档。