-
Notifications
You must be signed in to change notification settings - Fork 102
Various set_xxx directives added to nginx's rewrite module (md5/sha1, sql/json quoting, and many more)
openresty/set-misc-nginx-module
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
Name ngx_set_misc - more rewrite set commands *This module is not distributed with the Nginx source.* See the installation instructions. Status This module is production ready. Synopsis location /foo { set $a $arg_a; set_if_empty $a 56; # GET /foo?a=32 will yield $a == 32 # while GET /foo and GET /foo?a= will # yeild $a == 56 here. } location /bar { set $foo "hello\n\n'\"\\"; set_quote_sql_str $foo $foo; # for mysql # OR in-place editing: # set_quote_sql_str $foo; # now $foo is: 'hello\n\n\'\"\\' } location /bar { set $foo "hello\n\n'\"\\"; set_quote_pgsql_str $foo; # for PostgreSQL # now $foo is: E'hello\n\n\'\"\\' } location /json { set $foo "hello\n\n'\"\\"; set_quote_json_str $foo $foo; # OR in-place editing: # set_quote_json_str $foo; # now $foo is: "hello\n\n'\"\\" } location /baz { set $foo "hello%20world"; set_unescape_uri $foo $foo; # OR in-place editing: # set_quote_sql_str $foo; # now $foo is: hello world } upstream_list universe moon sun earth; upstream moon { ... } upstream sun { ... } upstream earth { ... } location /foo { set_hashed_upstream $backend universe $arg_id; drizzle_pass $backend; # used with ngx_drizzle } location /base32 { set $a 'abcde'; set_encode_base32 $a; set_decode_base32 $b $a; # now $a == 'c5h66p35' and # $b == 'abcde' } # GET /sha1 yields the output # aaf4c61ddcc5e8a2dabede0f3b482cd9aea9434d location /sha1 { set_sha1 $a hello; echo $a; } # ditto location /sha1 { set $a hello; set_sha1 $a; echo $a; } # GET /today yields the date of today in local time using format 'yyyy-mm-dd' location /today { set_local_today $today; echo $today; } Description Every directive provided by this module can be mixed freely with other nginx rewrite module's directives, like "if" and "set". (Thanks to NDK!) Directives set_if_empty set_quote_sql_str (can be used with ngx_array module's array_map_op) set_quote_pgsql_str (can be used with ngx_array module's array_map_op) set_quote_json_str (can be used with ngx_array module's array_map_op) set_unescape_uri (can be used with ngx_array module's array_map_op) set_escape_uri (can be used with ngx_array module's array_map_op) set_hashed_upstream set_encode_base32 (can be used with ngx_array module's array_map_op) RFC forces the [A-Z2-7] RFC-3548 compliant encoding, but we're using the "base32hex" encoding [0-9a-v]. set_decode_base32 (can be used with ngx_array module's array_map_op) RFC forces the [A-Z2-7] RFC-3548 compliant encoding, but we're using the "base32hex" encoding [0-9a-v]. set_sha1 (can be used with ngx_array module's array_map_op) set_local_today Caveats Do not use $arg_XXX or $http_XXX or other special variables defined in the nginx core module as the target variable in this module's directives. For instance, set_if_empty $arg_user 'foo'; # DO NOT USE THIS! will lead to data corruption. Installation 1. Grab the nginx source code from nginx.net (<http://nginx.net/ >), for example, the version 0.8.54 (see nginx compatibility), 2. Grab the NDK module from GitHub: http://github.com/simpl/ngx_devel_kit 3. and then build the source with this module: $ wget 'http://sysoev.ru/nginx/nginx-0.8.54.tar.gz' $ tar -xzvf nginx-0.8.54.tar.gz $ cd nginx-0.8.54/ # Here we assume you would install you nginx under /opt/nginx/. $ ./configure --prefix=/opt/nginx \ --add-module=/path/to/ngx_devel_kit \ --add-module=/path/to/set-misc-nginx-module $ make -j2 $ make install Download the latest version of the release tarball of this module from set-misc-nginx-module file list (<http://github.com/agentzh/set-misc-nginx-module/downloads >). Compatibility The following versions of Nginx should work with this module: * 0.9.x (last tested: 0.9.4) * 0.8.x (last tested: 0.8.54) * 0.7.x >= 0.7.46 (last tested: 0.7.68) Earlier versions of Nginx like 0.6.x and 0.5.x will *not* work. If you find that any particular version of Nginx above 0.7.44 does not work with this module, please consider reporting a bug. Report Bugs Although a lot of effort has been put into testing and code tuning, there must be some serious bugs lurking somewhere in this module. So whenever you are bitten by any quirks, please don't hesitate to 1. send a bug report or even patches to <agentzh@gmail.com>, 2. or create a ticket on the issue tracking interface (<http://github.com/agentzh/set-misc-nginx-module/issues >) provided by GitHub. Source Repository Available on github at agentzh/set-misc-nginx-module (<http://github.com/agentzh/set-misc-nginx-module >). ChangeLog Test Suite This module comes with a Perl-driven test suite. The test cases (<http://github.com/agentzh/set-misc-nginx-module/tree/master/test/t/ >) are declarative (<http://github.com/agentzh/set-misc-nginx-module/blob/master/test/t/sanity.t > ) too. Thanks to the Test::Base (<http://search.cpan.org/perldoc?Test::Base >) module in the Perl world. To run it on your side: $ cd test $ PATH=/path/to/your/nginx-with-set-misc-module:$PATH prove -r t You need to terminate any Nginx processes before running the test suite if you have changed the Nginx server binary. Test::Nginx (<http://search.cpan.org/perldoc?Test::Nginx >) is used by the test scaffold. Because a single nginx server (by default, "localhost:1984") is used across all the test scripts (".t" files), it's meaningless to run the test suite in parallel by specifying "-jN" when invoking the "prove" utility. Some parts of the test suite requires modules rewrite, and echo to be enabled as well when building Nginx. TODO Getting involved You'll be very welcomed to submit patches to the author or just ask for a commit bit to the source repository on GitHub. Author agentzh (章亦春) *<agentzh@gmail.com>* Copyright & License Copyright (c) 2010, Taobao Inc., Alibaba Group ( http://www.taobao.com ). Copyright (c) 2009, agentzh <agentzh@gmail.com>. This module is licensed under the terms of the BSD license. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. See Also NDK: http://github.com/simpl/ngx_devel_kit
About
Various set_xxx directives added to nginx's rewrite module (md5/sha1, sql/json quoting, and many more)
Resources
Stars
Watchers
Forks
Packages 0
No packages published