目录
Nginx核心指令_rewrite指令
Nginx核心指令_实战rewrite
Nginx核心指令_if指令
Nginx核心指令_set和break指令
Nginx核心指令_rewrite指令
地址重写与地址转发
地址重写
地址重写是实际上是为了实现址标准化,就像访问www.baidu.cn可 以出现www.baidu.com的首页,服务器会把www.baidu.cn重写成 www.baidu.com,浏览器的地址栏也会显示www.baidu.com。
地址转发
地址转发一般发生在同一站点项目内,而地址重写则没有限制。
总结:
- 地址转发后客户端浏览器地址栏中的地址显示是不改变的;而地址重写后客户端浏览器地址栏 中的地址改变为服务器选择确定的地址。
- 在一次地址转发整个过程中,只产生一次网络请求;而一次地址重写一般会产生两次请求。地 址转发一般发生在同一站点项目内;而地址重写没有该限制。
- 地址转发的速度较地址重定向快。
- 地址转发过程中,可以将客户端请求的request范围内的属性传递给新的页面,但地址重写不 可以。
rewrite常用全局变量
rewrite指令
该指令通过正则表达式的使用来改变URI。可以同时存在一个或者多个指令,按照顺序依次对URL进行匹配和处理。
该指令可以在server快或者location块中配置,其语法结构为:
rewrite regex replacement [flag];
关键字 正则 替代内容 flag标记
注意:
regex,用于匹配URI的正则表达式。使用括号 "()" 标记要截 取的内容。
rewrite参数的标签段位置:
server,location,if
常用正则表达式
rewrite 最后一项flag参数:
示例1
无论/search 后面跟什么内容,最后都会被永久重定向到百度页面
location /search {
rewrite ^/(.*) http://baidu.com
permanent;
}
示例2
创建三个文件夹,每个文件夹下有个1.html文件;
location /images {
rewrite /images/(.*) /pics/$1;
//•将URL /images/1.html 重写为 /pics/1.html
}
location /pics {
rewrite /pics/(.*) /photos/$1; //•将URL /pics/1.html 重写为 /photos/1.html
}
location /photos {
}
示例3
将URL /images/1.html 重写为 /pics/1.html, 并且不再匹配其他 location段
location /images {
rewrite /images/(.*) /pics/$1 break;
}
示例4
将URL /images/1.html 重写为 /pics/1.html, 重新进入server段后 匹配了/pics location段,然后又被重写。
location /images {
rewrite /images/(.*) /pics/$1 last;
}
实时效果反馈
1. 下列描述Nginx全局变量$request_method正确的是。
A 请求资源的方式
B 主机头,也就是域名
C 客户端的公网ip
D 请求的协议
2. Nginx核心指令Rewrite的主要作用是____。
A 定位资源文件
B 地址重定向
C 终止请求
D 条件判断
Nginx核心指令_实战rewrite
Nginx的rewrite功能在企业里应用非常广泛:
- 可以调整用户浏览的URL,看起来更规范,合乎开发及产品人员的需求。
- 网址换新域名后,让旧的访问跳转到新的域名上。
- 根据特殊变量、目录、客户端的信息进行URL调整等。
域名跳转
旧域名www.test.com直接跳转到新域名www.tong.com
server {
listen 80;
server_name test.com;
rewrite ^/(.*) http://www.tong.com/$1 permanent;
}
server {
listen 80;
server_name www.tong.com;
location / {
root html;
index index.html index.htm;
}
access_log logs/brian.log main gzip buffer=128k flush=5s;
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
实时效果反馈
1. Nginx核心配置文件中rewrite指令可以出现的标签段位置不包括____。
A server
B location
C http
D if
Nginx核心指令_if指令
该指令用来支持条件判断,并根据条件判断结果选择不同的Nginx配置,可以在server块或locatio块中配置该指令。
语法结构:
if (condition) { ... }
其中,花括号代表一个作用域,形成一个if配置块,是条件为真时的 Nginx配置。condition为判断条件( true/false ),它可以支持以下 几种设置方法:
变量名-如果变量的值为空字符串或者“0”开头的任意字符串,if指令认为条件为false,其他情况为 true,比如:
if ($slow) { .....
#Nginx配置
}
使用 "="(等于) 和 "!=" (不等于) 比较变量和字符串是否相等,相等时if指令为条件为true,反之为 false。
if ($request_method = POST) {
return 405;
}
注意: 这里的字符串不需要加引号。
变量与正则表达式
~ 表示匹配过程对大小写敏感
~* 表示匹配过程对大小写不敏感
!~ 表示匹配失败是if指令认为条件为true否则为false
if ($http_user_agent ~ MSIE) {
# $http_user_agent 的值中是否包含MSIE字符串,如果包含,为 true
}
示例
判断ip地址是否为192.168.66.10如果是返回“test if ok in Url /serach”
location /search {
if ($remote_addr = "192.168.66.10"){
return 200 "test if ok in url search"
}
}
示例
不允许谷歌浏览器访问,如果时候谷歌浏览器放回500
if ($http_user_agent ~ Chrome){
return 500;
}
实时效果反馈
1. Nginx核心配置文件中下列描述if指令正确的是____。
A 条件判断
B url重定向
C 终止请求
D 资源文件定位
Nginx核心指令_set和break指令
set指令
该指令用于设置一个新的变量。
语法结构
set variable value
variable,为变量的名称。注意要用符号“$”作为变量的第一个字符,且变量不能与Nginx服务器预 设的全局变量同名。
value,为变量的值,可以是字符串、其他变量或变量的组合等。
break指令
该指令用于中断当前相同作用域中的其他Nginx配置。
语法结构
break;
示例
location / {
if ($slow){
set $id $1 ; # 处于break指令之前,配置生效
break;
limit_rate 10k; #处于break指令之后,配置无效
}
}
实时效果反馈
1. Nginx核心配置文件中last标记在rewrite规则内表示含义是 ____。
A 向http重新发起请求
B 向server重新发起请求
C 终止请求
D 无意义