nginx替换网站响应内容(ngx_http_sub_module)

凉白开 Linux Nginx859,1708字数 2139阅读7分7秒阅读模式

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第三方模块文章源自运维生存时间-https://www.ttlsa.com/linux/nginx-modules-ngx_http_sub_module/

2. 指令(Directives)

语法:     sub_filter string replacement;
默认值:     —
配置段:     http, server, location
设置需要使用说明字符串替换说明字符串.string是要被替换的字符串,replacement是新的字符串,它里面可以带变量。文章源自运维生存时间-https://www.ttlsa.com/linux/nginx-modules-ngx_http_sub_module/

语法:     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.文章源自运维生存时间-https://www.ttlsa.com/linux/nginx-modules-ngx_http_sub_module/

语法: sub_filter_once on | off;
默认值: sub_filter_once on;
配置段: http, server, location
字符串替换一次还是多次替换,默认替换一次,例如你要替换响应内容中的ttlsa为运维生存时间,如果有多个ttlsa出现,那么只会替换第一个,如果off,那么所有的ttlsa都会 被替换文章源自运维生存时间-https://www.ttlsa.com/linux/nginx-modules-ngx_http_sub_module/

语法: sub_filter_types mime-type ...;
默认值: sub_filter_types text/html;
配置段: http, server, location
指定需要被替换的MIME类型,默认为“text/html”,如果制定为*,那么所有的文章源自运维生存时间-https://www.ttlsa.com/linux/nginx-modules-ngx_http_sub_module/

3. nginx替换字符串实例

3.1 配置文章源自运维生存时间-https://www.ttlsa.com/linux/nginx-modules-ngx_http_sub_module/

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 测试

内容如下文章源自运维生存时间-https://www.ttlsa.com/linux/nginx-modules-ngx_http_sub_module/

# cat /data/site/www.ttlsa.com/2013/10/20131001_sub1.html 
welcome to tTlsa!
TTLSA TEAM!

访问结果文章源自运维生存时间-https://www.ttlsa.com/linux/nginx-modules-ngx_http_sub_module/

# curl www.ttlsa.com/2013/10/20131001_sub1.html           
welcome to 运维生存时间!
TTLSA TEAM!

我们可以看到它替换是不区分大小写的,而且ttlsa只被替换了一次。我把sub_filter_once on改成off试试。文章源自运维生存时间-https://www.ttlsa.com/linux/nginx-modules-ngx_http_sub_module/

location / {
    sub_filter  ttlsa '运维生存时间';
    sub_filter_once off;
}

接着测试文章源自运维生存时间-https://www.ttlsa.com/linux/nginx-modules-ngx_http_sub_module/

# curl www.ttlsa.com/2013/10/20131001_sub1.html            
welcome to 运维生存时间!
运维生存时间 TEAM!

我们可以看到ttlsa都被替换掉了.文章源自运维生存时间-https://www.ttlsa.com/linux/nginx-modules-ngx_http_sub_module/

例如你想在</head>后追加一段js,配置如下:文章源自运维生存时间-https://www.ttlsa.com/linux/nginx-modules-ngx_http_sub_module/

location / {
    sub_filter      </head> '</head><script language="javascript" src="$script"></script>';
    sub_filter_once on;
}

这边我就不再做测试了,大家可以测试一下.文章源自运维生存时间-https://www.ttlsa.com/linux/nginx-modules-ngx_http_sub_module/

4. 结束语

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

转载请注明来至运维生存时间:https://www.ttlsa.com/html/3289.html文章源自运维生存时间-https://www.ttlsa.com/linux/nginx-modules-ngx_http_sub_module/ 文章源自运维生存时间-https://www.ttlsa.com/linux/nginx-modules-ngx_http_sub_module/

weinxin
我的微信
微信公众号
扫一扫关注运维生存时间公众号,获取最新技术文章~
凉白开
  • 本文由 发表于 04/10/2013 01:04:00
  • 转载请务必保留本文链接:https://www.ttlsa.com/linux/nginx-modules-ngx_http_sub_module/
  • nginx
  • nginx模块
  • ngx_http_sub_module
评论  8  访客  6
    • iuwai
      iuwai 9

      你好,返回的是xml文件,能替换么?

        • TTLSA
          TTLSA 9

          @ iuwai 可以

            • long
              long 9

              @ TTLSA 请问想替换的返回文件是个swf的flash文件,这种应该如何设置呢?

          • david
            david 9

            请问可以替换中文吗?

              • TTLSA
                TTLSA 9

                @ david 理论上可以的~

              • 默北
                默北 6

                站点变灰
                sub_filter ‘<head>’ ‘<style type="text/css">html {filter:progid:DXImageTransform.Microsoft.BasicImage(grayscale=1); }</style></head>’;
                sub_filter_once on;

              评论已关闭!