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. 常见的java设计模式

    单例模式 简单点说,就是一个应用程序中,某个类的实例对象只有一个,你没有办法去new,因为构造器是被private修饰的,一般通过getInstance()的方法来获取它们的实例. getInstan ...

  2. [Swift]LeetCode243.最短单词距离 $ Shortest Word Distance

    Given a list of words and two words word1 and word2, return the shortest distance between these two ...

  3. [Swift]LeetCode649. Dota2 参议院 | Dota2 Senate

    In the world of Dota2, there are two parties: the Radiantand the Dire. The Dota2 senate consists of ...

  4. [Swift]LeetCode1022. 从根到叶的二进制数之和 | Sum of Root To Leaf Binary Numbers

    Given a binary tree, each node has value 0 or 1.  Each root-to-leaf path represents a binary number ...

  5. 面向对象-Java MOOC翁恺老师第一次作业

    由于看这个慕课的时候已经结课了,没有办法提交查看代码是否正确...先保存一下,以后再提交改错 欢迎批评指正! 题目链接:https://www.icourse163.org/learn/ZJU-100 ...

  6. 深度学习笔记(七)SSD 论文阅读笔记简化

    一. 算法概述 本文提出的SSD算法是一种直接预测目标类别和bounding box的多目标检测算法.与faster rcnn相比,该算法没有生成 proposal 的过程,这就极大提高了检测速度.针 ...

  7. wget Mac OS 下安装

    wget是一个从网络上自动下载文件的自由工具,支持通过HTTP.HTTPS.FTP三个最常见的TCP/IP协议下载,并可以使用HTTP代理. 下面介绍如何在Mac OS 下安装Wget 下载最新版的 ...

  8. java设计模式(2)---六大原则

    设计模式之六大原则 这篇博客非常有意义,希望自己能够理解的基础上,在实际开发中融入这些思想,运用里面的精髓. 先列出六大原则:单一职责原则.里氏替换原则.接口隔离原则.依赖倒置原则.迪米特原则.开闭原 ...

  9. Vue生命周期详解

    Vue所有的生命周期钩子自动绑定在this上下文到实例中,因此你可以访问数据,对属性和方法进行运算.这意味着你不能使用箭头函数来定义一个生命周期方法.这是因为箭头函数绑定了父上下文,因此this与你期 ...

  10. SVN就是这么简单

    什么是SVN SVN全称:Subversion,是一个开放源代码的版本控制系统 Svn是一种集中式文件版本管理系统.集中式代码管理的核心是服务器,所有开发者在开始新一天的工作之前必须从服务器获取代码, ...