2023-06-30 07:41:06
ngx_http_substitutions_filter_module 是一个强大的 Nginx 模块,它提供了比官方 ngx_http_sub_module 更灵活的内容替换功能。以下是它的主要特性和使用方法:
主要特性支持正则表达式:
可以使用正则表达式进行复杂的字符串匹配和替换。
例如,可以匹配特定格式的 URL 或文件路径。
大小写敏感匹配:
支持区分大小写的匹配(通过 i 标志控制)。
多次替换:
可以对同一内容多次应用不同的替换规则。
MIME 类型限制:
可以指定哪些 MIME 类型的内容需要进行替换(如 text/html, text/css 等)。
变量支持:
替换文本中可以包含 Nginx 变量。
绕过替换:
可以通过指定变量来决定是否绕过替换逻辑。
由于这是一个第三方模块,需要重新编译 Nginx 来添加此模块:
下载模块源码:
git clone查看当前 Nginx 的编译参数:
nginx -V重新编译 Nginx:
下载 Nginx 源码并解压。
使用之前的编译参数,并添加模块路径:
./configure [原有参数] --add-module=/path/to/ngx_http_substitutions_filter_modulemakemake install验证安装:
重新启动 Nginx 后,使用 nginx -V 确认模块已添加。
替换静态资源链接:
location / { subs_filter_types text/html text/css; subs_filter '使用正则表达式匹配特定后缀的文件,并替换为新的域名。
HTTP 到 HTTPS 替换:
location / { subs_filter 'http://$host' 'https://$host';}将所有 HTTP 链接替换为 HTTPS。
绕过特定条件的替换:
location / { subs_filter_bypass $arg_no_subs; subs_filter 'old' 'new';}如果请求中包含 no_subs 参数,则跳过替换。
性能影响:
正则表达式匹配可能会增加 CPU 负载,特别是在高流量环境下。
压缩内容:
如果响应是压缩的(如 gzip),模块无法解压并处理内容,需禁用压缩:
proxy_set_header Accept-Encoding "";测试与调试:
在生产环境应用前,建议先在测试环境验证替换规则的正确性。
ngx_http_substitutions_filter_module 通过支持正则表达式、多次替换和 MIME 类型限制等功能,提供了比官方模块更强大的内容替换能力。合理使用此模块,可以高效地完成复杂的 URL 重写、静态资源替换等任务。