阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

Nginx的URL Rewrite基本指令

120次阅读
没有评论

共计 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 用来判断文件是否可执行

Nginx 的 URL Rewrite 基本指令

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

正文完
星哥说事-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-21发表,共计2883字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中