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

  • A+
所属分类:Nginx

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"。

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;

echo $quoted;
}
结果为'hello\n\r\'\"\\'。
当是当个参数时,该指令将修改参数变量。如:
location /test {
set $value "hello\n\r'\"\\";
set_quote_sql_str $value;

echo $value;
}
结果为'hello\n\r\'\"\\'。

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字符串常量的引用规则。

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;

echo $quoted;
}
结果为:"hello\n\r'\"\\"。
当当个参数时,该指令将修改参数变量。如:
location /test {
set $value "hello\n\r'\"\\";
set_quote_json_str $value;

echo $value;
}
结果为:"hello\n\r'\"\\"。

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指令来非转义先。

当单个参数时,该指令将修改参数变量位置,如:
location /test {
set $key $arg_key;
set_unescape_uri $key;

echo $key;
}
当请求GET /test?key=hello+world%21时,得到:hello world!。

set_escape_uri
语法:set_escape_uri $dst <src> /set_escape_uri $dst
默认值:no
配置段:location, location if
与set_unescape_uri相似。

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 { ... }

upstream_list universe moon sun earth;

location /test {
set_unescape_uri $key $arg_key;
set $list_name universe;
set_hashed_upstream $backend $list_name $key;

echo $backend;
}
当请求/test?key=blah时,得到的值是 "moon", "sun", "earth"其中一个。取决于参数key。

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;

echo $digest;
}
当请求/test时,得到:c5h66p35。
默认情况下,字符=用来左填充字节对齐。可以通过 set_misc_base32_padding off来禁止填充。

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

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

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安装

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

weinxin
微信公众号
扫一扫关注运维生存时间公众号,获取最新技术文章~

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

目前评论:7   其中:访客  3   博主  0   引用   4

    • […] 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 9

          pretty good

        • 来自外部的引用: 4

          • nginx教程从入门到精通(ttlsa出品)
          • nginx教程从入门到精通 | learsu
          • nginx教程—从入门到精通(转) | HuangJin's Blog
          • 资源汇集:nginx教程从入门到精通 | linux运维小站–linux系统架构_服务器运维_Linux运维工程师工作手札