nginx中http_sub_module模块(替换网站响应内容)

简介:

ngx_http_sub_module模块是一个过滤器,它修改网站响应内容中的字符串,比如你想把响应内容中的‘ttlsa’全部替换成‘运维生存时间’,这个模块已经内置在nginx中,但是默认未安装,需要安装需要加上配置参数:–with-http_sub_module


1. 安装nginx

# wget http://nginx.org/download/nginx-1.4.2.tar.gz  

# tar -xzvf nginx-1.4.2.tar.gz  

# cd nginx-1.4.2  

#  --prefix=/usr/local/nginx-1.4.2 --with-http_stub_status_module --with-http_sub_module  

# make  

# make install 


如果你已经安装了nginx,只需要额外追加这个模块,请看如何安装nginx第三方模块


2. 指令(Directives)

语法:     sub_filter string replacement;

默认值:     —

配置段:     http, server, location

设置需要使用说明字符串替换说明字符串.string是要被替换的字符串,replacement是新的字符串,它里面可以带变量。


语法:     sub_filter_last_modified on | off;

默认值:  sub_filter_last_modified off;

配置段:     http, server, location


这个指令在nginx 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.


语法: sub_filter_once on | off;

默认值: sub_filter_once on;

配置段: http, server, location

字符串替换一次还是多次替换,默认替换一次,例如你要替换响应内容中的ttlsa为运维生存时间,如果有多个ttlsa出现,那么只会替换第一个,如果off,那么所有的ttlsa都会 被替换


语法: sub_filter_types mime-type …;

默认值: sub_filter_types text/html;

配置段: http, server, location

指定需要被替换的MIME类型,默认为“text/html”,如果制定为*,那么所有的


3. nginx替换字符串实例

3.1 配置

server {  

    listen       80;  

    server_name  www.ttlsa.com;     


    root /data/site/www.ttlsa.com;      


    location / {  

        sub_filter  ttlsa '运维生存时间';  

        sub_filter_types text/html;  

        sub_filter_once on;  

    }  


3.2 测试

内容如下

# cat /data/site/www.ttlsa.com/2013/10/20131001_sub1.html   

welcome to tTlsa!  

TTLSA TEAM! 


访问结果

# curl www.ttlsa.com/2013/10/20131001_sub1.html             

welcome to 运维生存时间!  

TTLSA TEAM! 


我们可以看到它替换是不区分大小写的,而且ttlsa只被替换了一次。我把sub_filter_once on改成off试试。

location / {  

    sub_filter  ttlsa '运维生存时间';  

    sub_filter_once off;  


接着测试

# curl www.ttlsa.com/2013/10/20131001_sub1.html              

welcome to 运维生存时间!  

运维生存时间 TEAM! 


我们可以看到ttlsa都被替换掉了.


例如你想在</head>后追加一段js,配置如下:

location / { 

    sub_filter      </head> '</head><script language="javascript" src="$script"></script>';  

    sub_filter_once on;  

这边我就不再做测试了,大家可以测试一下.


4. 结束语

这个nginx替换响应内容的模块安装使用尤为简单,应用的地方相对较少,在nginx中也是一个可选模块。假如站点出现什么敏感字,想修改很耗时间,不妨试试这个模块.或者想临时在站点中加上一个通用js或者css之类的文件,也可以使用这个模块.至于要在哪里,大家看看自己的需求.


本文转自  亮公子  51CTO博客,原文链接:http://blog.51cto.com/iyull/1864380
相关文章
|
28天前
|
缓存 应用服务中间件 网络安全
Nginx中配置HTTP2协议的方法
Nginx中配置HTTP2协议的方法
68 7
|
2月前
|
缓存 移动开发 安全
Web安全-HTTP响应拆分(CRLF注入)漏洞
Web安全-HTTP响应拆分(CRLF注入)漏洞
150 1
|
3月前
|
Shell
HTTP状态码解析:在Haskell中判断响应成功与否
HTTP状态码解析:在Haskell中判断响应成功与否
|
2月前
|
缓存 JavaScript 安全
nodejs里面的http模块介绍和使用
综上所述,Node.js的http模块是构建Web服务的基础,其灵活性和强大功能,结合Node.js异步非阻塞的特点,为现代Web应用开发提供了坚实的基础。
119 62
|
2月前
|
存储 JSON API
HTTP 请求与响应处理:C#中的实践
【10月更文挑战第4天】在现代Web开发中,HTTP协议至关重要,无论构建Web应用还是API开发,都需要熟练掌握HTTP请求与响应处理。本文从C#角度出发,介绍HTTP基础知识,包括请求与响应结构,并通过`HttpClient`库演示如何发送GET请求及处理响应,同时分析常见错误并提供解决方案,助你更高效地完成HTTP相关任务。
100 2
|
2月前
|
Docker 容器
docker nginx-proxy 添加自定义https网站
docker nginx-proxy 添加自定义https网站
41 4
|
2月前
|
前端开发 JavaScript 应用服务中间件
使用nginx部署网站
使用nginx部署网站
|
3月前
|
缓存 移动开发 安全
Web安全-HTTP响应拆分(CRLF注入)漏洞
Web安全-HTTP响应拆分(CRLF注入)漏洞
189 8
|
2月前
|
应用服务中间件 nginx C++
nginx的cgi模块
nginx的cgi模块
41 0
|
2月前
|
JSON API 开发者
深入解析Python网络编程与Web开发:urllib、requests和http模块的功能、用法及在构建现代网络应用中的关键作用
深入解析Python网络编程与Web开发:urllib、requests和http模块的功能、用法及在构建现代网络应用中的关键作用
22 0