ningx 响应内容替换

本文介绍了Nginx的ngx_http_sub_module子模块,该模块作为过滤器可以在响应中替换指定字符串。文章提供了配置示例,并详细解释了如何使用sub_filter指令及其它相关指令如sub_filter_last_modified和sub_filter_once等。

见官方文档:http://nginx.org/en/docs/http/ngx_http_sub_module.html

 

 

The ngx_http_sub_module module is a filter that modifies a response by replacing one specified string by another.

This module is not built by default, it should be enabled with the --with-http_sub_moduleconfiguration parameter.

Example Configuration

 

location / {
    sub_filter '<a href="http://127.0.0.1:8080/'  '<a href="https://$host/';
    sub_filter '<img src="http://127.0.0.1:8080/' '<img src="https://$host/';
    sub_filter_once on;
}

 

Directives
Syntax:sub_filter string replacement;
Default:
Context: httpserverlocation

Sets a string to replace and a replacement string. The string to replace is matched ignoring the case. The string to replace (1.9.4) and replacement string can contain variables. Severalsub_filter directives can be specified on one configuration level (1.9.4). These directives are inherited from the previous level if and only if there are no sub_filter directives defined on the current level.

Syntax:sub_filter_last_modified on | off;
Default:
sub_filter_last_modified off;
Context: httpserverlocation

This directive appeared in version 1.5.1.

Allows preserving the “Last-Modified” header field from the original response during replacement to facilitate response caching.

By default, the header field is removed as contents of the response are modified during processing.

Syntax:sub_filter_once on | off;
Default:
sub_filter_once on;
Context: httpserverlocation

Indicates whether to look for each string to replace once or repeatedly.

Syntax:sub_filter_types mime-type ...;
Default:
sub_filter_types text/html;
Context: httpserverlocation

Enables string replacement in responses with the specified MIME types in addition to “text/html”. The special value “*” matches any MIME type (0.8.29).

 

### 实现 Nginx 内容替换 为了实现在 Nginx 中的内容替换,`ngx_http_sub_module` 提供了 `sub_filter` 指令来完成这一任务。此模块允许修改 HTTP 响应体内的指定字符串[^1]。 #### 启用 sub_filter 模块 如果尚未启用该模块,在编译 Nginx 时需加入 `--with-http_sub_module` 参数以确保其可用性。对于已安装的 Nginx 版本,则可能需要重新编译或通过包管理工具添加支持。 #### 配置示例 下面给出一段简单的配置例子展示如何利用 `sub_filter` 来执行内容替换: ```nginx http { include mime.types; default_type application/octet-stream; server { listen 80; server_name localhost; location / { proxy_pass http://example.com; # 反向代理目标站点 # 开始定义要应用的过滤规则 sub_filter '旧文本' '新文本'; sub_filter_once off; # 对整个响应只做一次替换 (可选) # 设置为off表示多次出现都会被替换 } } } ``` 这段配置会将来自 `http://example.com` 的所有页面中出现的 "旧文本" 替换成 "新文本"[^4]。 #### 处理压缩过的响应 当后端服务开启了 Gzip 压缩时,直接使用 `sub_filter` 将不起作用因为数据已被编码。此时应该关闭 gzip 或者设置合适的解压机制让 Nginx 能够正常解析并替换相应部分[^2]。 #### 正则表达式的高级用法 除了基本的文字替换外,还可以借助于 `subs_filter` 指令来进行基于正则表达式的复杂模式匹配与替换工作,提供更加灵活的操作选项[^3]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值