nginx+set-misc-nginx-module模块说明

默北 Nginx727,2071字数 5918阅读19分43秒阅读模式

set-misc-nginx-module模块是标准的HttpRewriteModule指令的扩展,提供更多的功能,如URI转义与非转义、JSON引述、Hexadecimal/MD5/SHA1/Base32/Base64编码与解码、随机数等等。在后面的应用中,都将会接触使用到这个模块的。该模块是由章亦春先生开发的,他开发的其他模块应用也会使用到这个模块的。充分使用nginx非阻塞模式,对性能上有极大的提高,我个人认为很有必要去弄懂弄透nginx,通过自己去动手动脑用实例来加以验证,不断的对模块参数命令加以理解,在实际环境中应用自如。某朋友说“招运维人员,不懂nginx的一律不要。”呵呵,有点道理的。

1. set-misc-nginx-module模块指令说明:
set_if_empty
语法:set_if_empty $dst <src>;
默认值:no
配置段:location, location if
如果参数$dst是空的,则赋值为<src>。
set $a 32;
set_if_empty $a 56;
$a的值为32.
set $a '';
set $value "hello, world"
set_if_empty $a $value;
$a的值为"hello, world"。文章源自运维生存时间-https://www.ttlsa.com/nginx/nginx_set-misc-nginx-module-module-description/

set_quote_sql_str
语法:set_quote_sql_str $dst <src> / set_quote_sql_str $dst
默认值:no
配置段:location, location if
当两个参数时,该指令将引用第二个参数<src>值。该指令通常用于防止SQL注入。mysql字符串值引用规则和分配第一个参数结果。
location /test {
set $value "hello\n\r'\"\\";
set_quote_sql_str $quoted $value;文章源自运维生存时间-https://www.ttlsa.com/nginx/nginx_set-misc-nginx-module-module-description/

echo $quoted;
}
结果为'hello\n\r\'\"\\'。
当是当个参数时,该指令将修改参数变量。如:
location /test {
set $value "hello\n\r'\"\\";
set_quote_sql_str $value;文章源自运维生存时间-https://www.ttlsa.com/nginx/nginx_set-misc-nginx-module-module-description/

echo $value;
}
结果为'hello\n\r\'\"\\'。文章源自运维生存时间-https://www.ttlsa.com/nginx/nginx_set-misc-nginx-module-module-description/

set_quote_pgsql_str
语法:set_quote_pgsql_str $dst <src> / set_quote_pgsql_str $dst
默认值:no
配置段: location, location if
与set_quote_sql_str相似,但是要符合PostgreSQL的SQL字符串常量的引用规则。文章源自运维生存时间-https://www.ttlsa.com/nginx/nginx_set-misc-nginx-module-module-description/

set_quote_json_str
语法:set_quote_json_str $dst <src> / set_quote_json_str $dst
默认值:no
配置段:location, location if
当两个参数时,该指令将引用第二个参数<src>。JSON字符串值引用规则和分配第一个参数结果。
location /test {
set $value "hello\n\r'\"\\";
set_quote_json_str $quoted $value;文章源自运维生存时间-https://www.ttlsa.com/nginx/nginx_set-misc-nginx-module-module-description/

echo $quoted;
}
结果为:"hello\n\r'\"\\"。
当当个参数时,该指令将修改参数变量。如:
location /test {
set $value "hello\n\r'\"\\";
set_quote_json_str $value;文章源自运维生存时间-https://www.ttlsa.com/nginx/nginx_set-misc-nginx-module-module-description/

echo $value;
}
结果为:"hello\n\r'\"\\"。文章源自运维生存时间-https://www.ttlsa.com/nginx/nginx_set-misc-nginx-module-module-description/

set_unescape_uri
语法: set_unescape_uri $dst <src> / set_unescape_uri $dst
默认值: no
配置段:location, location if
当两个参数时,该指令将非转义第二个参数<src>的值作为URI一部分,并分配第一个参数变量$dst分配结果。如:
location /test {
set_unescape_uri $key $arg_key;
echo $key;
}
当请求GET /test?key=hello+world%21时,得到:hello world!。
注意: nginx标准的变量$arg_PARAMETER保存原始的URI参数(转义过的),因此需要set_unescape_uri指令来非转义先。文章源自运维生存时间-https://www.ttlsa.com/nginx/nginx_set-misc-nginx-module-module-description/

当单个参数时,该指令将修改参数变量位置,如:
location /test {
set $key $arg_key;
set_unescape_uri $key;文章源自运维生存时间-https://www.ttlsa.com/nginx/nginx_set-misc-nginx-module-module-description/

echo $key;
}
当请求GET /test?key=hello+world%21时,得到:hello world!。文章源自运维生存时间-https://www.ttlsa.com/nginx/nginx_set-misc-nginx-module-module-description/

set_escape_uri
语法:set_escape_uri $dst <src> /set_escape_uri $dst
默认值:no
配置段:location, location if
与set_unescape_uri相似。文章源自运维生存时间-https://www.ttlsa.com/nginx/nginx_set-misc-nginx-module-module-description/

set_hashed_upstream
语法:set_hashed_upstream $dst <upstream_list_name> <src>
默认值:no
配置段:location, location if
参数<src> hash后的值,对应于<upstream_list_name>中的某个upstream名称。
upstream moon { ... }
upstream sun { ... }
upstream earth { ... }文章源自运维生存时间-https://www.ttlsa.com/nginx/nginx_set-misc-nginx-module-module-description/

upstream_list universe moon sun earth;文章源自运维生存时间-https://www.ttlsa.com/nginx/nginx_set-misc-nginx-module-module-description/

location /test {
set_unescape_uri $key $arg_key;
set $list_name universe;
set_hashed_upstream $backend $list_name $key;文章源自运维生存时间-https://www.ttlsa.com/nginx/nginx_set-misc-nginx-module-module-description/

echo $backend;
}
当请求/test?key=blah时,得到的值是 "moon", "sun", "earth"其中一个。取决于参数key。文章源自运维生存时间-https://www.ttlsa.com/nginx/nginx_set-misc-nginx-module-module-description/

set_encode_base32
语法:set_encode_base32 $dst <src> / set_encode_base32 $dst
默认值:no
配置段: location, location if
当两个参数时,该指令将对第二个参数<src>进行base32(hex)编码,并将结果赋值给第一个变量参数$dst。 如:
location /test {
set $raw "abcde";
set_encode_base32 $digest $raw;文章源自运维生存时间-https://www.ttlsa.com/nginx/nginx_set-misc-nginx-module-module-description/

echo $digest;
}
当请求/test时,得到:c5h66p35。
默认情况下,字符=用来左填充字节对齐。可以通过 set_misc_base32_padding off来禁止填充。文章源自运维生存时间-https://www.ttlsa.com/nginx/nginx_set-misc-nginx-module-module-description/

当单个参数时,该指令将修改参数变量位置。如:
location /test {
set $value "abcde";
set_encode_base32 $value;文章源自运维生存时间-https://www.ttlsa.com/nginx/nginx_set-misc-nginx-module-module-description/

echo $value;
}
当请求/test时,得到:c5h66p35。文章源自运维生存时间-https://www.ttlsa.com/nginx/nginx_set-misc-nginx-module-module-description/

set_misc_base32_padding
语法:set_misc_base32_padding on|off
默认值:on
配置段:http, server, server if, location, location if
当set_encode_base32指令以base32进行编码时,该指令控制是否以字符=来填充。

set_decode_base32
语法:set_decode_base32 $dst <src> | set_decode_base32 $dst
默认值:no
配置段: location, location if
与set_encode_base32相似,只不过是反过程。

set_encode_base64
语法: set_encode_base64 $dst <src> |set_encode_base64 $dst
默认值:no
配置段;location, location if
当两个参数时,该指令将对第二个参数<src>进行base64编码,并将结果赋值给第一个变量参数$dst。 如:
location /test {
set $raw "abcde";
set_encode_base64 $digest $raw;

echo $digest;
}
当请求/test时,得到YWJjZGU=。

当单个参数时,该指令将修改参数变量位置。如:
location /test {
set $value "abcde";
set_encode_base64 $value;

echo $value;
}
当请求/test时,得到YWJjZGU=。

set_decode_base64
语法:set_decode_base64 $dst <src> | set_decode_base64 $dst
默认值:no
配置段:location, location if
与set_encode_base64相似,只不过是反过程。

set_encode_hex
语法:set_encode_hex $dst <src> | set_encode_hex $dst
默认值:no
配置段: location, location if
当两个参数时,该指令将对第二个参数<src>进行hexadecimal编码,并将结果赋值给第一个变量参数$dst。 如:
location /test {
set $raw "章亦春";
set_encode_hex $digest $raw;

echo $digest;
}
当请求/test时,得到:e7aba0e4baa6e698a5。

当单个参数时,该指令将修改参数变量位置。如:
location /test {
set $value "章亦春";
set_encode_hex $value;

echo $value;
}
当请求/test时,得到:e7aba0e4baa6e698a5。

set_decode_hex
语法:set_decode_hex $dst <src> | set_decode_hex $dst
默认值:no
配置段: location, location if
与set_encode_hex相似,只不过是反过程。

set_sha1
语法:set_sha1 $dst <src> | set_sha1 $dst
默认值:no
配置段:location, location if
当两个参数时,该指令将对第二个参数<src>进行SHA-1编码,并将结果赋值给第一个变量参数$dst。 如:
location /test {
set $raw "hello";
set_sha1 $digest $raw;

echo $digest;
}
当请求/test,得到:aaf4c61ddcc5e8a2dabede0f3b482cd9aea9434d。

当单个参数时,该指令将修改参数变量位置。如:
location /test {
set $value "hello";
set_sha1 $value;

echo $value;
}

set_md5
语法:set_md5 $dst <src> | set_md5 $dst
默认值:no
配置段:location, location if
当两个参数时,该指令将对第二个参数<src>进行MD5编码,并将结果赋值给第一个变量参数$dst。 如:
location /test {
set $raw "hello";
set_sha1 $digest $raw;

echo $digest;
}
当请求/test,得到:5d41402abc4b2a76b9719d911017c592。

当单个参数时,该指令将修改参数变量位置。如:
location /test {
set $value "hello";
set_sha1 $value;

echo $value;
}

set_hmac_sha1
语法:set_hmac_sha1 $dst <secret_key> <src> | set_hmac_sha1 $dst
默认值:no
配置段:location, location if
为参数<src>计算HMAC-SHA1值,将结果赋值给参数变量$dst并带上密钥<secret_key>。如:
location /test {
set $secret 'thisisverysecretstuff';
set $string_to_sign 'some string we want to sign';
set_hmac_sha1 $signature $secret $string_to_sign;
set_encode_base64 $signature $signature;
echo $signature;
}
请求/test,得到:R/pvxzHC4NLtj7S+kXFg/NePTmk=。
注意:该指令依赖于OpenSSL库,因此编译nginx时,需要--with-http_ssl_module。

set_random
语法: set_random $res <from> <to>
默认值:no
配置段:location, location if
生成从<from>与<to>之间的非负数的随机数。含<from> <to>。

set_secure_random_alphanum
语法:set_secure_random_alphanum $res <length>
默认值:no
配置段:location, location if
生成长度为<length>的随机字符串。字符有[a-zA-Z0-9]。

set_secure_random_lcalpha
语法:set_secure_random_lcalpha $res <length>
默认值:no
配置段:location, location if
生成长度为<length>的随机字符串。字符有[a-z]。

set_rotate
语法:set_rotate $value <from> <to>
默认值:no
配置段:location, location if

set_local_today
语法:set_local_today $dst
默认值:no
配置段:location, location if
将本地的今天日期以"yyyy-mm-dd"格式赋值给参数变量$dst。

2. set-misc-nginx-module安装

# ./configure --prefix=/usr/local/nginx \
--with-http_ssl_module \
--add-module=../ngx_devel_kit \
--add-module=../set-misc-nginx-module
# make
# make install

set-misc-nginx-module依赖ngx_devel_kit模块,且--add-module=ngx_devel_kit一定要早于--add-module=set-misc-nginx-module

weinxin
我的微信
微信公众号
扫一扫关注运维生存时间公众号,获取最新技术文章~
默北
  • 本文由 发表于 24/08/2013 01:05:58
  • 转载请务必保留本文链接:https://www.ttlsa.com/nginx/nginx_set-misc-nginx-module-module-description/
评论  7  访客  3
    • […] 50. Nginx国人开发缩略图模块(ngx_image_thumb) 51. nginx+set-misc-nginx-module模块说明 52. nginx geo使用方法 53. Nginx 与 Lua 54. […]

      • […] 50.?Nginx国人开发缩略图模块(ngx_image_thumb) 51.?nginx+set-misc-nginx-module模块说明 52.?nginx geo使用方法 53.?Nginx 与 Lua […]

        • 牧童Damian
          牧童Damian 9

          pretty good

        评论已关闭!