Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
a filter module which can do both regular expression and fixed string substitutions for nginx
Perl C Shell
Tree: a913f7519c

Fetching latest commit…

Cannot retrieve the latest commit at this time

Failed to load latest commit information.
doc
test
util
CHANGES
README
config
ngx_http_subs_filter_module.c

README

nginx_substitutions_filter
    *Note: this module is not distributed with the Nginx source.
    Installation instructions can be found below.*

  Description
    nginx_substitutions_filter is a filter module which can do both regular
    expression and fixed string substitutions on response bodies. This
    module is quite different from the Nginx's native Substitution Module.
    It scans the output chains buffer and matches string line by line, just
    like Apache's mod_substitute
    (<http://httpd.apache.org/docs/trunk/mod/mod_substitute.html>).

  Example
    location / {

        subs_filter_types text/html text/css text/xml;
        subs_filter st(\d*).example.com $1.example.com ir;
        subs_filter a.example.com s.example.com;

    }

  Directives
    *   subs_filter_types

    *   subs_filter

   subs_filter_types
    syntax: *subs_filter_types mime-type [mime-types] *

    default: *subs_filter_types text/html*

    context: *http, server, location*

    *subs_filter_types* is used to specify which content types should be
    checked for *subs_filter*. The default is only *text/html*.

    This module just works with plain text. If the response is compressed,
    it can't uncompress the response and will ignore this response. This
    module can be compatible with gzip filter module. But it will not work
    with proxy compressed response. You can disable the compressed response
    like this:

    proxy_set_header Accept-Encoding "";

   subs_filter
    syntax: *subs_filter source_str destination_str [gior] *

    default: *none*

    context: *http, server, location*

    *subs_filter* allows replacing source string(regular expression or
    fixed) in the nginx response with destination string. Substitution text
    may contain variables. More than one substitution rules per location is
    supported. The meaning of the third flags are:

    *   *g*(default): Replace all the match strings.

    *   *i*: Perform a case-insensitive match.

    *   *o*: Just replace the first one.

    *   *r*: The pattern is treated as a regular expression, default is
        fixed string.

  Installation
    To install, get the source with subversion:

    svn checkout http://substitutions4nginx.googlecode.com/svn/trunk/
    substitutions4nginx-read-only

    and then compile nginx with the following option:

    ./configure --add-module=/path/to/module

  Known issue
    *   In some circumstance, the page contain some very large line(>10k).
        This page may cause some problems. I suggest you use short line, or
        you can enlarge the proxy buffer number. For example:

        proxy_buffers           128 8k;
    *

  CHANGES
    Changes with nginx_substitutions_filter 0.5.2 2010-08-11

    *   do many optimizing for this module

    *   fix a bug of buffer overlap

    *   fix a segment fault bug when output chain return NGX_AGAIN.

    *   fix a bug about last buffer with no linefeed. This may cause segment
        fault. Thanks for Josef Fröhle

    Changes with nginx_substitutions_filter 0.5 2010-04-15

    *   refactor the source structure, create branches of dev

    *   fix a bug of small chunk of buffers causing lose content

    *   fix the bug of last_buf and the nginx's compatibility above 0.8.25

    *   fix a bug with unwanted capture config error in fix string
        substitution

    *   add feature of regex captures

    Changes with nginx_substitutions_filter 0.4 2009-12-23

    *   fix many bugs

    Changes with nginx_substitutions_filter 0.3 2009-02-04

    *   Initial public release

  Reporting a bug
    Questions/patches may be directed to Weibin Yao, yaoweibin@gmail.com.

Something went wrong with that request. Please try again.