nginx的ngx_http_sub_module模块,可以用于修改网站响应内容中的字符串,如过滤敏感词。第三方模块ngx_http_substitutions_filter_module,弥补了ngx_http_sub_module的不足,可以采用正则表达式替换。

part 1、安装ngx_http_sub_module

nginx默认是不安装ngx_http_sub_module模块的,直接应用sub_filter指令将报错

nginx: [emerg] unknown directive "sub_filter" in /nginx-test/conf/nginx.conf:

因此需要在编译过程中添加 --with-http_sub_module 参数

# 编译
./configure --prefix=/nginx-sub --with-http_sub_module
# 安装
make install

part 2、sub模块替换文本

官网文档说明,ngx_http_sub_module包括四个命令:

sub_filter string replacement;                 将字符串string修改成replacement,不区分大小写,传入文本是上一次处理后的文本

sub_filter_last_modified on | off;    default: off      是否阻止response header中写入Last-Modified,防止缓存,默认是off,即防止缓存

sub_filter_once on | off;        default: on      sub_filter指令是执行一次,还是重复执行,默认是只执行一次

sub_filter_types mime-type ...;      default: text/html    指定类型的MINE TYPE才有效

下面以替换路飞为例:

sub.html原始文本为:

1)修改一次

location /sub {
sub_filter 'luffy' '路飞';
}

发现不区分大小写的把Luffy替换为了路飞,而第三行的luffy不变

2)重复执行修改

location /sub {
sub_filter 'luffy' '路飞';
  sub_filter_once off;
}

这次把Luffy和luffy都替换成路飞了

备注:开放80端口命令

# 开启端口
# --zone #作用域
# --add-port=/tcp #添加端口,格式为:端口/通讯协议
# --permanent #永久生效,没有此参数重启后失效
firewall-cmd --zone=public --add-port=/tcp --permanent
# 重启防火墙
firewall-cmd --reload

part 3、subs_filter多个替换

ngx_http_substitutions_filter_module是一个第三方模块,它可以多次替换或者正则替换网站响应内容,需要通过--add-module参数编译添加

首先需要下载,地址是:https://github.com/yaoweibin/ngx_http_substitutions_filter_module

下载之后,我放在了与nginx源码平级的目录下

# 编译
./configure --prefix=/nginx-sub --with-http_sub_module --add-module=../ngx_http_substitutions_filter_module-master
# 安装
make install 
subs_filter source_str destination_str [gior]   default:g    默认是全局匹配,大小写敏感

使用subs_filter指令

location /sub {
subs_filter 'luffy' '路飞';
}

location /sub {
subs_filter 'luffy' '路飞' i;
}

使用正则表达式:

location /sub {
subs_filter luffy|鲁夫 路飞 ir;
}

nginx sub模块替换文本的更多相关文章

  1. (转)nginx 常用模块整理

    原文:http://blog.51cto.com/arm2012/1977090 1. 性能相关配置 worker_processes number | auto: worker进程的数量:通常应该为 ...

  2. nginx基础模块

    http://www.nginx.cn/doc/ 基础模块 HTTP Core模块* HTTP Upstream 模块 HTTP Access 模块 HTTP Auth Basic 模块 HTTP A ...

  3. nginx添加模块 (非覆盖安装)

    nginx添加模块(非覆盖安装) 原已经安装好的nginx,现在需要添加一个未被编译安装的模块: 查看原来编译时都带了哪些参数# /usr/local/nginx/sbin/nginx -V ngin ...

  4. [转帖]Nginx rewrite模块深入浅出详解

    Nginx rewrite模块深入浅出详解 https://www.cnblogs.com/beyang/p/7832460.html rewrite模块(ngx_http_rewrite_modul ...

  5. Nginx详解七:Nginx基础篇之Nginx官方模块

    Nginx官方模块 --with-http_stub_status_module:Nginx的客户端状态,用于监控连接的信息,配置语法如下:配置语法:stub_status;默认状态:-配置方法:se ...

  6. nginx第三方模块安装方法

    nginx第三方模块安装方法 ./configure --prefix=/你的安装目录 --add-module=/第三方模块目录 比如echo模块. 没安装前,使用测试. location /tes ...

  7. Nginx RTMP 模块 nginx-rtmp-module 指令详解

    译序:截至 Jul 8th,2013 官方公布的最新 Nginx RTMP 模块 nginx-rtmp-module 指令详解.指令Corertmp语法:rtmp { ... }上下文:根描述:保存所 ...

  8. nginx常用模块(三)

    Nginx常用模块(三) ngx_http_proxy_module模块配置(http或https协议代理) proxy_pass URL; 应用上下文:location, if in locatio ...

  9. Nginx 常用模块

    Nginx 常用模块 1. ngx_http_autoindex_module # ngx_http_autoindex_module模块处理以斜杠字符(' / ')结尾的请求,并生成一个目录列表. ...

随机推荐

  1. new Date()设置日期在IOS的兼容问题

    一般这样创建一个日期变量 var d = new Date("2017-08-11 12:00:00"); 发现在iOS中不兼容,返回valid Date. IOS中不支持 - 连 ...

  2. Java实现堆排序和计数排序

    堆排序代码: 思想:每次都取堆顶的元素,将其放在序列最后面,然后将剩余的元素重新调整为最小堆,依次类推,最终得到排序的序列. import java.util.Arrays; /** * 思路:首先要 ...

  3. Java面试题整理:这些Java程序员面试中经常遇见的题目,必须掌握才能有好结果

    1.是否可以从一个static方法内部发出对非static方法的调用? 不可以.因为非static方法是要与对象关联在一起的,必须创建一个对象后,才可以在该对象上进行方法调用,而static方法调用时 ...

  4. Javascript高级编程学习笔记(86)—— Canvas(3)绘制矩形

    绘制矩形 矩形是唯一一种可以直接在2D上下文中绘制的形状. 与矩形有关的方法包括: fillRect() strokeRect() clearRect() 上述方法都接收四个参数: 绘制矩形的 X 坐 ...

  5. [Swift]LeetCode121. 买卖股票的最佳时机 I | Best Time to Buy and Sell Stock

    Say you have an array for which the ith element is the price of a given stock on day i. If you were ...

  6. [Swift]LeetCode135. 分发糖果 | Candy

    There are N children standing in a line. Each child is assigned a rating value. You are giving candi ...

  7. [Swift]LeetCode990. 等式方程的可满足性 | Satisfiability of Equality Equations

    Given an array equations of strings that represent relationships between variables, each string equa ...

  8. python高级-装饰器(19)

    一.什么是闭包 先看一个例子: #定义一个函数 def test(number): #在函数内部在定义一个函数,并且这个函数用到外围函数的变量 #那么将这个函数及用到的一些变量称之为闭包 def te ...

  9. Android 解压zip文件(支持中文)

    过了n多天后,当再次使用原先博客上写的那篇: Android 压缩解压zip文件 去做zip包的解压的时候,出现了原来没有发现的很多问题.首先是中文汉字问题,使用java的zip包不能很好的解决解压问 ...

  10. Java基础1:深入理解Java面向对象三大特性

    更多内容请关注微信公众号[Java技术江湖] 这是一位阿里 Java 工程师的技术小站,作者黄小斜,专注 Java 相关技术:SSM.SpringBoot.MySQL.分布式.中间件.集群.Linux ...