nginx+set-misc-nginx-module模塊說明

set-misc-nginx-module模塊是標準的HttpRewriteModule指令的擴展,提供更多的功能,如URI轉義與非轉義、JSON引述、Hexadecimal/MD5/SHA1/Base32/Base64編碼與解碼、隨機數等等。在後面的應用中,都將會接觸使用到這個模塊的。該模塊是由章亦春先生開發的,他開發的其餘模塊應用也會使用到這個模塊的。充分使用nginx非阻塞模式,對性能上有極大的提升,我我的認爲頗有必要去弄懂弄透nginx,經過本身去動手動腦用實例來加以驗證,不斷的對模塊參數命令加以理解,在實際環境中應用自如。某朋友說「招運維人員,不懂nginx的一概不要。」呵呵,有點道理的。mysql

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」。nginx

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;sql

echo $quoted;
}
結果爲’hello\n\r\’\」\\’。
當是當個參數時,該指令將修改參數變量。如:
location /test {
set $value 「hello\n\r’\」\\」;
set_quote_sql_str $value;json

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字符串常量的引用規則。dom

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;ide

echo $quoted;
}
結果爲:」hello\n\r’\」\\」。
噹噹個參數時,該指令將修改參數變量。如:
location /test {
set $value 「hello\n\r’\」\\」;
set_quote_json_str $value;性能

echo $value;
}
結果爲:」hello\n\r’\」\\」。this

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。

相關文章
相關標籤/搜索