目录

Nginx核心指令_rewrite指令

Nginx核心指令_实战rewrite 

Nginx核心指令_if指令

Nginx核心指令_set和break指令


Nginx核心指令_rewrite指令

Nginx【Nginx核心指令(rewrite指令、实战rewrite 、if指令、set和break指令】(六)-全面详解(学习总结---从入门到深化)_运维

 地址重写与地址转发

地址重写

地址重写是实际上是为了实现址标准化,就像访问www.baidu.cn可 以出现www.baidu.com的首页,服务器会把www.baidu.cn重写成 www.baidu.com,浏览器的地址栏也会显示www.baidu.com。

地址转发 

地址转发一般发生在同一站点项目内,而地址重写则没有限制。

总结:

  • 地址转发后客户端浏览器地址栏中的地址显示是不改变的;而地址重写后客户端浏览器地址栏 中的地址改变为服务器选择确定的地址。
  • 在一次地址转发整个过程中,只产生一次网络请求;而一次地址重写一般会产生两次请求。地 址转发一般发生在同一站点项目内;而地址重写没有该限制。
  • 地址转发的速度较地址重定向快。
  • 地址转发过程中,可以将客户端请求的request范围内的属性传递给新的页面,但地址重写不 可以。

rewrite常用全局变量 

Nginx【Nginx核心指令(rewrite指令、实战rewrite 、if指令、set和break指令】(六)-全面详解(学习总结---从入门到深化)_服务器_02

rewrite指令 

该指令通过正则表达式的使用来改变URI。可以同时存在一个或者多个指令,按照顺序依次对URL进行匹配和处理。

Nginx【Nginx核心指令(rewrite指令、实战rewrite 、if指令、set和break指令】(六)-全面详解(学习总结---从入门到深化)_运维_03

 

 该指令可以在server快或者location块中配置,其语法结构为:

rewrite regex replacement [flag];

关键字   正则   替代内容     flag标记

注意:

regex,用于匹配URI的正则表达式。使用括号 "()" 标记要截 取的内容。 

rewrite参数的标签段位置: 

server,location,if

常用正则表达式 

Nginx【Nginx核心指令(rewrite指令、实战rewrite 、if指令、set和break指令】(六)-全面详解(学习总结---从入门到深化)_分布式_04

rewrite 最后一项flag参数: 

Nginx【Nginx核心指令(rewrite指令、实战rewrite 、if指令、set和break指令】(六)-全面详解(学习总结---从入门到深化)_分布式_05

示例1 

无论/search 后面跟什么内容,最后都会被永久重定向到百度页面

location /search {
   rewrite   ^/(.*)   http://baidu.com
permanent;
}

示例2

创建三个文件夹,每个文件夹下有个1.html文件;

Nginx【Nginx核心指令(rewrite指令、实战rewrite 、if指令、set和break指令】(六)-全面详解(学习总结---从入门到深化)_服务器_06

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【Nginx核心指令(rewrite指令、实战rewrite 、if指令、set和break指令】(六)-全面详解(学习总结---从入门到深化)_Nginx_07

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【Nginx核心指令(rewrite指令、实战rewrite 、if指令、set和break指令】(六)-全面详解(学习总结---从入门到深化)_运维_08

该指令用来支持条件判断,并根据条件判断结果选择不同的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指令

Nginx【Nginx核心指令(rewrite指令、实战rewrite 、if指令、set和break指令】(六)-全面详解(学习总结---从入门到深化)_服务器_09

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 无意义