共计 2883 个字符,预计需要花费 8 分钟才能阅读完成。
1、Nginx Rewrite 规则相关指令:
功能:实现 URL 的重写,通过 Rewrite 规则,可以实现规范的 URL,根据变量来做 URL 转向及选择配置。
作用范围:server{},location{},if{}
优先级:
执行 server 块的 rewrite 指令 > 执行 location 匹配 > 执行选定的 location 中的 rewrite 指令。
Nginx Rewrite 规则相关指令有 if、rewrite、set、return、break 等,其中 Rewrite 是最关键的指令。
1.1)break 指令
语法:break
默认值:none
使用环境:server,location,if
作用:break 终止匹配, 不再匹配后面的规则
eg:
if (slow) {
limit_rate 20k;
break;
}
1.2)if 指令
语法:if(condition){…}
默认值:none
使用环境:server,location
作用:该指令用于检测一个条件是否符合,如果条件符合,则执行大括号内的语句。if 指令不支持嵌套,不支持多个条件 && 和 || 处理。
以下信息可以被指定为条件:
(1)变量名,错误的值包括:空字符串“”,或者任何以 0 开始的字符串。
(2)变量比较可以使用“=”和“!=”(等于和不等于)运算符
(3)正则表达式模式匹配可以使用“~”和“~*”符号
(4)~ 为区分大小写匹配
(5)~* 为不区分大小写匹配
(6)!~ 和!~* 分别为区分大小写不匹配及不区分大小写不匹配
(7)- f 和!- f 用来判断是否存在文件
(8)- d 和!- d 用来判断是否存在目录
(9)- e 和!- e 用来判断是否存在文件或目录
(10)- x 和!- x 用来判断文件是否可执行
1.3)return 指定:
语法:return code
默认值:none
使用环境:server,location,if
作用:该指令用于结束规则的执行并返回状态码给客户端。状态码可以使用这些值:204、400、402-406、408、410、411、413、416、500-504. 此外,非标准状态码 444 将以不发送任何 Header 头的方式结束连接:
eg:访问 URL 以.sh 和。bash 结束,返回状态码 403.
location `.*\.(sh|bash)?$
{
return 403;
}
1.4)rewrite 指令:
语法: rewrite regex replacement flag
默认值:none
使用环境:server,location,if
作用:该指令根据变大时来重定向 URL,或者修改字符串,指令根据配置文件中的顺序来执行。
Rewrite 指令的最后一下参数为 flag 标记,支持的 flag 标记有:
last 相当于 Apache 里的 [L] 标记,表示完成 rewrite
break 本条规则匹配完成之后,终止匹配,不再匹配后面的规则。
redirect 返回 302 临时重定向 地址栏会显示跳转后的地址
permanent 返回 301 永久重定向 地址栏会显示跳转后的地址
1.5)set 指令:
语法:set variable value
默认值:none
使用环境:server,location,if
作用:该指令用于定义一个变量,并给变量赋值,变量的值可以为文本,变量及文本变量的联合。
eg:set $varname ‘hello’
1.6)uninitalized_variable_warn 指令:
语法:unitialized_variable_warn onloff
默认值:unitialized_variable_warn on
使用环境:http、server、location、if
作用:该指令用于开启或者关闭未初始化变量的警告信息,默认值为开启。
1.7)Nginx Rewrite 可以用到的全局变量:
$args:#这个变量等于请求行中的参数,同 $query_string
$content_length:请求头中的 Content-length 字段。
$content_type:请求头中的 Content-Type 字段。
$document_root:当前请求在 root 指令中指定的值。
$host:请求主机头字段,否则为服务器名称。
$http_user_agent:客户端 agent 信息
$http_cookie:客户端 cookie 信息
$limit_rate:这个变量可以限制连接速率。
$request_method:客户端请求的动作,通常为 GET 或 POST。
$remote_addr:客户端的 IP 地址。
$remote_port:客户端的端口。
$remote_user:已经经过 Auth Basic Module 验证的用户名。
$request_filename:当前请求的文件路径,由 root 或 alias 指令与 URI 请求生成。
$scheme:HTTP 方法(如 http,https)。
$server_protocol:请求使用的协议,通常是 HTTP/1.0 或 HTTP/1.1。
$server_addr:服务器地址,在完成一次系统调用后可以确定这个值。
$server_name:服务器名称。
$server_port:请求到达服务器的端口号。
$request_uri:包含请求参数的原始 URI,不包含主机名,如:”/foo/bar.php?arg=baz”。
$uri:不带请求参数的当前 URI,$uri 不包含主机名,如”/foo/bar.html”。
$document_uri:与 $uri 相同。
下面关于 Nginx 的文章您也可能喜欢,不妨参考下:
CentOS 7.2 下编译安装 PHP7.0.10+MySQL5.7.14+Nginx1.10.1 http://www.linuxidc.com/Linux/2016-09/134804.htm
搭建基于 Linux6.3+Nginx1.2+PHP5+MySQL5.5 的 Web 服务器全过程 http://www.linuxidc.com/Linux/2013-09/89692.htm
Linux 下编译安装 Nginx 1.8.1 及配置 http://www.linuxidc.com/Linux/2017-02/140495.htm
CentOS 6.4 安装配置 Nginx+Pcre+php-fpm http://www.linuxidc.com/Linux/2013-08/88984.htm
Nginx 日志过滤 使用 ngx_log_if 不记录特定日志 http://www.linuxidc.com/Linux/2014-07/104686.htm
Nginx 的 500,502,504 错误解决方法 http://www.linuxidc.com/Linux/2015-03/115507.htm
CentOS 7 编译安装 Nginx1.10.2 脚本启动失败解决思路 http://www.linuxidc.com/Linux/2017-01/139794.htm
Nginx 的详细介绍:请点这里
Nginx 的下载地址:请点这里
本文永久更新链接地址:http://www.linuxidc.com/Linux/2017-02/140776.htm