[TOC]
0x00 内置常变量扩展
Ngx 变量介绍
变量名称 | 描述说明 | 示例演示 |
---|---|---|
ngx.var.uri | 请求的域名/后的路径字符串但不带?请求参数 | /image/weiyigeek.png |
0x01 内置指令扩展
指令介绍使用
internal 关键字: 表示在 location 中加入 “internal” 声明仅限内部调用。
代码语言:javascript复制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支持),写在这里只是为了方便理解:
代码语言:javascript复制
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
代码语言:javascript复制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 {
....
}