比ngx_http_sub_module更强大!ngx_http_substitutions_filter_module如何帮助你进行内容替换

比ngx_http_sub_module更强大!ngx_http_substitutions_filter_module如何帮助你进行内容替换
最新回答
仙蒂瑞拉

2023-06-30 07:41:06

ngx_http_substitutions_filter_module 是一个强大的 Nginx 模块,它提供了比官方 ngx_http_sub_module 更灵活的内容替换功能。以下是它的主要特性和使用方法:

主要特性
  1. 支持正则表达式

    可以使用正则表达式进行复杂的字符串匹配和替换。

    例如,可以匹配特定格式的 URL 或文件路径。

  2. 大小写敏感匹配

    支持区分大小写的匹配(通过 i 标志控制)。

  3. 多次替换

    可以对同一内容多次应用不同的替换规则。

  4. MIME 类型限制

    可以指定哪些 MIME 类型的内容需要进行替换(如 text/html, text/css 等)。

  5. 变量支持

    替换文本中可以包含 Nginx 变量。

  6. 绕过替换

    可以通过指定变量来决定是否绕过替换逻辑。

安装方法

由于这是一个第三方模块,需要重新编译 Nginx 来添加此模块:

  1. 下载模块源码

    git clone
    https://github.com/yaoweibin/ngx_http_substitutions_filter_module.git
  2. 查看当前 Nginx 的编译参数

    nginx -V
  3. 重新编译 Nginx

    下载 Nginx 源码并解压。

    使用之前的编译参数,并添加模块路径:

    ./configure [原有参数] --add-module=/path/to/ngx_http_substitutions_filter_modulemakemake install
  4. 验证安装

    重新启动 Nginx 后,使用 nginx -V 确认模块已添加。

使用示例基本配置location / { subs_filter_types text/html text/css text/xml; subs_filter 'source_string' 'destination_string' gi;}
  • subs_filter_types:指定需要进行替换的 MIME 类型。
  • subs_filter:定义替换规则,支持正则表达式和标志(如 g 全局替换,i 忽略大小写)。
高级示例
  1. 替换静态资源链接

    location / { subs_filter_types text/html text/css; subs_filter '
    https://post.cplus8.com/assets/
    ([^"']*?).(jpg|png|webp|js|jpeg|bmp|woff2|woff)' '
    https://srcplus.ddwoo.top/
    $1.$2' igr;}

    使用正则表达式匹配特定后缀的文件,并替换为新的域名。

  2. HTTP 到 HTTPS 替换

    location / { subs_filter 'http://$host' 'https://$host';}

    将所有 HTTP 链接替换为 HTTPS。

  3. 绕过特定条件的替换

    location / { subs_filter_bypass $arg_no_subs; subs_filter 'old' 'new';}

    如果请求中包含 no_subs 参数,则跳过替换。

注意事项
  1. 性能影响

    正则表达式匹配可能会增加 CPU 负载,特别是在高流量环境下。

  2. 压缩内容

    如果响应是压缩的(如 gzip),模块无法解压并处理内容,需禁用压缩:

    proxy_set_header Accept-Encoding "";
  3. 测试与调试

    在生产环境应用前,建议先在测试环境验证替换规则的正确性。

总结

ngx_http_substitutions_filter_module 通过支持正则表达式、多次替换和 MIME 类型限制等功能,提供了比官方模块更强大的内容替换能力。合理使用此模块,可以高效地完成复杂的 URL 重写、静态资源替换等任务。