Location 匹配规则

规则 描述
~ 表示执行一个正则匹配,区分大小写
~* 表示执行一个正则匹配,不区分大小写
^~ 表示普通字符匹配,如果该选项匹配,只匹配该选项,不匹配别的选项,一般用来匹配目录
= 进行普通字符精准匹配
@ 定义一个命名的location,使用在内部定向时,例如error_page, try_files

规则优先级:
= 优先级最高
^~ 优先级大于下面的匹配符优先级
~, ~ 同级匹配规则,从上往下匹配,如果匹配成功,则不继续匹配。
例如:
location ~ /abc {
echo 111;
}
location ~
/abc {
echo 222;
}
访问:http://localhost/abc
输出:111
@ 定义命名的location
例如:
location @oyyh {
echo “I am oyyh.”;
}
location =/ {
try_files $uri @oyyh;
}
访问 http://localhost
输出:I am oyyh.

Rewrite指令

该指令主要用于url重写,url重写后,能让我们在改变网站结构后无需客户端修改原来的书签,也无需修改我们网站的请求连接地址,能够提高网站的安全性。
rewrite指令通过正则表达式的使用来改变URI,可以同时存在一个或多个指令,按照顺序依次对URL进行配置和处理。
语法:rewrite regex replacement flag;
参数:
regex 用于匹配URI的正则表达式
replacement 匹配成功后用于替换URI截取内容中的字符串
flag 用来设置rewrite对URI的处理行为
示例:
location ^~ /abc {
// rewrite重写后,重写的URL不会显式的在浏览器上展示,浏览器上展示的还是原来的URL。
rewrite ^/abc /page1 last; // last: 如果/abc未匹配到或要跳转的/break不存在,则继续往下执行
rewrite ^/abc /page2 break; // break: 如果/abc未匹配到或要跳转的/break不存在,则立刻报错
// 重定向,下面的处理,会在浏览器中显式的展示
rewrite ^/abc /page3 redirect; // 302 临时重定向
rewrite ^/abc /page4 permanent; // 301 永久重定向
}

IF指令

if指令可以在serve块中或location块中配置
参数:
“=” 与 != 比较变量与字符串是否相等
正则匹配,变量与正则之间使用~, ~, !~, !~连接,~表示匹配大小写,~*不匹配大小写
-f 与 !-f 判断文件是否存在
-d 与 !-d 判断目录是否存在
-e 与 !-e 判断目录或文件是否存在
-x 与 !-x 判断请求的文件是否可执行

变量

变量 说明
$args 存放了请求url的请求参数
$document_uri 存放了请求中当前的URI,并且不包含请求参数
$host 存放了请求URL中主机部分字段
$http_cookie 存放了客户端cookie信息
$scheme 存放了客户端请求的使用协议
$request_method 存放了客户端的请求方式
$uri 与$document_uri含义相同

Break指令

break指令用来中断当前作用域中剩余的nginx配置,使break;后的nginx配置无效。
使用范围:
server块、location块、if块

Return指令

return指令用于完成对请求的处理,直接向客户端返回响应。
使用范围:
server块、location块、if块
参数:
Code 返回给客户端的http状态码,范围0-999
Text 返回给客户端的响应内容,支持变量的使用
URL 返回给客户端的URL地址

Set指令

set指令用于设置一个变量
参数:
Varible 变量名称,注意开头要使用$符号,并且不能与nginx全局变量冲突
Value 变量的值,可以是字符串,变量及变量的组合

Valid_referers指令

该指令用于获取referer头域中的值,并且根据该值的情况给nginx全局变量$invalid_referer赋值。如果referer头域没有符合valid_referers指令配置的值,$invalid_referer变量将被赋值为1。
参数:
None 检测referer头域不存在的情况
Blocked 检测referer头域的值被防火墙或代理服务器删除或伪装的情况
Server_names 设置一个或多个URL,检测referer头域的值是否是这些URL中的某个