Appearance
Nginx 的 sub_filter 使用
sub_filter 是 Nginx 的一个模块,用于在响应内容中替换字符串。它通常用于修改 HTML、CSS 或 JavaScript 文件中的内容。以下是 sub_filter 的基本用法和配置示例。
1. 确保 Nginx 已启用 ngx_http_sub_module
sub_filter 是 ngx_http_sub_module 模块提供的功能。大多数 Nginx 安装默认包含此模块,但如果你不确定,可以通过以下命令检查:
bash
nginx -V 2>&1 | grep -- '--with-http_sub_module'如果输出中包含 --with-http_sub_module,则表示已启用。
2. 基本语法
sub_filter 的基本语法如下:
nginx
sub_filter <要替换的字符串> <替换后的字符串>;3. 配置示例
假设你想将响应内容中的 foo 替换为 bar,可以在 Nginx 配置文件中添加以下内容:
nginx
server {
listen 80;
server_name example.com;
location / {
proxy_pass http://backend_server;
# 启用 sub_filter
sub_filter 'foo' 'bar';
sub_filter_once off; # 默认只替换一次,设置为 off 以替换所有匹配项
}
}4. 高级用法
多次替换:默认情况下,
sub_filter只替换第一个匹配项。如果你想替换所有匹配项,可以设置sub_filter_once off;。多组替换:你可以使用多个
sub_filter指令进行多组替换。
nginx
location / {
proxy_pass http://backend_server;
sub_filter 'foo' 'bar';
sub_filter 'hello' 'world';
sub_filter_once off;
}- 替换响应头:
sub_filter只能替换响应体内容。如果你想替换响应头,可以使用more_set_headers模块(需要安装ngx_http_headers_module)。
5. 注意事项
sub_filter只能用于文本内容,不能用于二进制文件。- 如果响应内容经过压缩(如 gzip),
sub_filter将无法正常工作。你需要确保响应内容未压缩,或者在 Nginx 配置中禁用压缩。
nginx
location / {
proxy_pass http://backend_server;
proxy_set_header Accept-Encoding ""; # 禁用压缩
sub_filter 'foo' 'bar';
sub_filter_once off;
}6. 完整示例
以下是一个完整的 Nginx 配置示例,展示了如何使用 sub_filter 替换响应内容中的多个字符串:
nginx
server {
listen 80;
server_name example.com;
location / {
proxy_pass http://backend_server;
proxy_set_header Accept-Encoding ""; # 禁用压缩
# 启用 sub_filter
sub_filter 'foo' 'bar';
sub_filter 'hello' 'world';
sub_filter_once off; # 替换所有匹配项
}
}通过以上配置,Nginx 会在响应内容中将所有的 foo 替换为 bar,并将所有的 hello 替换为 world。
7. 测试与验证
配置完成后,重新加载 Nginx 配置:
bash
sudo nginx -s reload然后访问你的网站,检查响应内容是否按预期进行了替换。
总结
sub_filter 是一个强大的工具,可以在 Nginx 中轻松实现内容替换。通过合理配置,你可以灵活地修改响应内容,满足各种需求。