设为首页 收藏本站
查看: 1391|回复: 0

[经验分享] nginx+set-misc-nginx-module模块说明

[复制链接]

尚未签到

发表于 2018-11-11 08:38:57 | 显示全部楼层 |阅读模式
  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 ;
  默认值:no
  配置段:location, location if
  如果参数$dst是空的,则赋值为。
  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  / set_quote_sql_str $dst
  默认值:no
  配置段:location, location if
  当两个参数时,该指令将引用第二个参数值。该指令通常用于防止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  / set_quote_pgsql_str $dst
  默认值:no
  配置段: location, location if
  与set_quote_sql_str相似,但是要符合PostgreSQL的SQL字符串常量的引用规则。
  set_quote_json_str
  语法:set_quote_json_str $dst  / set_quote_json_str $dst
  默认值:no
  配置段:location, location if
  当两个参数时,该指令将引用第二个参数。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  / set_unescape_uri $dst
  默认值: no
  配置段:location, location if
  当两个参数时,该指令将非转义第二个参数的值作为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  /set_escape_uri $dst
  默认值:no
  配置段:location, location if
  与set_unescape_uri相似。
  set_hashed_upstream
  语法:set_hashed_upstream $dst  
  默认值:no
  配置段:location, location if
  参数 hash后的值,对应于中的某个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  / set_encode_base32 $dst
  默认值:no
  配置段: location, location if
  当两个参数时,该指令将对第二个参数进行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  | set_decode_base32 $dst
  默认值:no
  配置段: location, location if
  与set_encode_base32相似,只不过是反过程。
  set_encode_base64
  语法: set_encode_base64 $dst  |set_encode_base64 $dst
  默认值:no
  配置段;location, location if
  当两个参数时,该指令将对第二个参数进行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  | set_decode_base64 $dst
  默认值:no
  配置段:location, location if
  与set_encode_base64相似,只不过是反过程。
  set_encode_hex
  语法:set_encode_hex $dst  | set_encode_hex $dst
  默认值:no
  配置段: location, location if
  当两个参数时,该指令将对第二个参数进行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  | set_decode_hex $dst
  默认值:no
  配置段: location, location if
  与set_encode_hex相似,只不过是反过程。
  set_sha1
  语法:set_sha1 $dst  | set_sha1 $dst
  默认值:no
  配置段:location, location if
  当两个参数时,该指令将对第二个参数进行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  | set_md5 $dst
  默认值:no
  配置段:location, location if
  当两个参数时,该指令将对第二个参数进行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   | set_hmac_sha1 $dst
  默认值:no
  配置段:location, location if
  为参数计算HMAC-SHA1值,将结果赋值给参数变量$dst并带上密钥。如:
  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  
  默认值:no
  配置段:location, location if
  生成从与之间的非负数的随机数。含 。
  set_secure_random_alphanum
  语法:set_secure_random_alphanum $res
  默认值:no
  配置段:location, location if
  生成长度为的随机字符串。字符有[a-zA-Z0-9]。
  set_secure_random_lcalpha
  语法:set_secure_random_lcalpha $res
  默认值:no
  配置段:location, location if
  生成长度为的随机字符串。字符有[a-z]。
  set_rotate
  语法:set_rotate $value  
  默认值:no
  配置段:location, location if
  set_local_today
  语法:set_local_today $dst
  默认值:no
  配置段:location, location if
  将本地的今天日期以”yyyy-mm-dd”格式赋值给参数变量$dst。


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.iyunv.com/thread-633507-1-1.html 上篇帖子: ubuntu 上 nginx 源码安装 下篇帖子: centos yum安装nginx 提示 No package nginx available-Linux
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表