跳转至

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 仓库 中找到此模块的其他配置提示和文档。