[TOC]
0x00 内置常变量扩展 Ngx 变量介绍
变量名称
描述说明
示例演示
ngx.var.uri
请求的域名/
后的路径字符串但不带?请求参数
/image/weiyigeek.png
0x01 内置指令扩展 指令介绍使用 internal 关键字: 表示在 location 中加入 “internal” 声明仅限内部调用。
1 2 3 4 5 6 7 8 location /nodeOne/auth/ { internal; root /var/resource/media/; } location = /check/auth { internal; proxy_pass http://foo.com/check-spam; }
注意:但是由于nginx的if判断中不需要 嵌套和多条件的 && 和 || ,那就只能分开写啦: nginx的配置中不支持if条件的逻辑与/逻辑或运算 ,并且不支持if的嵌套语法,我们可以用变量的方式来实现: 首先是伪代码(即不被nginx支持),写在这里只是为了方便理解:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 if ($remote_addr ~ "^(12.34|56.78)" && $http_user_agent ~* "spider" ) { return 403; } 下面这是等效的,并真实可用的配置 代码如下: set $flag 0;if ($remote_addr ~ "^(12.34|56.78)" ) { set $flag "${flag} 1" ; } if ($http_user_agent ~* "spider" ) { set $flag "${flag} 2" ; } if ($flag = "012" ) { return 403; }
配置stream 模块(用于tcp和udp的转发)添加用于端口转发的配置文件conf/stream.conf
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 worker_processes auto; events { use epoll; worker_connections 65535; } stream { server { listen 9990; proxy_pass 172.20.9.80:3306; } server { listen 9992; proxy_pass 172.20.9.76:22; } } http { .... }