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

#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;

#pid logs/nginx.pid;

events {
# 使用epoll,由系统linux内核2.6提供的高性能方式
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 {
....
}