主要内容:一、location匹配的规则和优先级(重点,面试会问,工作用得到)
二、nginx常用的问题(要求掌握)
三、rewrite:重定向功能(有掌握,有理解),重定向的标识位,标识位的四种类型是重点
在工作中配置nginx,主要配置location
location匹配:用正则表达式
URI:统一资源标识符,是一种字符串标识,用于标识抽象的或物理资源(文件,图片,视频)
nginx中uri是www.ky30.com/mages/1.jpg中的/mages/1.jpg
一、location匹配的规则和优先级(重点,面试会问,工作用得到)
location就是用来匹配uri的:1、精确匹配:location =/{......}
2、正则匹配:location ~ /{......}
3、一般匹配:location / {......}
匹配的规则:
=:精确匹配,完全匹配,错一个字都匹配不到,必须完全一致
^~:匹配普通字符,但是是前缀匹配
~:区分大小写的匹配
~*:不区分大小写的匹配
~$:结束位置
!~:区分大小写的匹配 逻辑或,取反
!~*:不区分大小写,也是取反
总结:掌握 = ^~ ~ 和 !~*
location匹配原则:越精确越匹配,优先级越高
匹配的优先级:越精确,优先级越高
= ~ /
精确匹配优先级最高,正则次之,通用的优先级最低
总结:优先级由高到低排序
location =(完全匹配) location ^~(匹配普通字符) location ~*(不区分大小写) location /tast/ 标明路径的通用匹配 location /(一般通用)
一旦匹配到了location 不再向下匹配 location匹配的是uri
生产中的location匹配规则:
1、第一个必选规则location = /{ } 直接匹配根网站,因为通过域名访问网站首页是最多的
使用精确匹配可以加快处理速度。相当于首页,用于首页访问
2、第二个规则:location ^~/static/ { } 处理静态文件的请求,目录匹配
3、第三个规则:location ~*.(gif|jpg|png|css) 正则匹配,匹配图片用的
4、第四个规则:
location / {
proxy_pass 指定代理服务器,反向代理,转发动态请求,php或jsp这样的请求发到后端
}
面试会问:1、匹配的类型 精确匹配 正则匹配 一般匹配
2、匹配的优先级 精确匹配优先级最高,正则次之,通用的优先级最低
三、rewrite
面试会问:重定向的标志位是什么,怎么写了解一下即可,在工作中基本不会写
rewrite:重写,重定向 rewrite使用nginx的全局变量或者是自己设置的变量,结合正则表达式和标识位实现url的重定向
例:
location / {
root html;
index html index htm;
default_type text/plain;查询的结果会以文本的格式直接返回在页面上
return 200 "(lport:$remote-port)";
}
核心:x-forwarded-for:原始ip
x-Real-Ip:真实Ip
掌握:default_type text/plain:表示如果没有在其他地方显示设置:content-type的头字段,默认响应为text/plain 纯文本格式
了解:text/html:默认的响应类型就是页面
text/plain:纯文本格式,类似于.txt文件
text/css:CSS样式表的类型,CSS
tecxt/javascript:java的脚本,js:前端文件,也可以理解为是java解析的程序文件
rewrite的执行顺序:1、先执行server块中的rewrite
2、执行location匹配
3、如果location当中还有rewrite,继续执行,不停的rewrite就会陷入死循环,只能10次,然后报错,报错状态码为500
rewrite的语法:rewrite <regex> <replacement> [flag]
解释:rewrite:开始重定向 regex:正则匹配的规则 replacement:跳转后的内容,要重定向的url flag:标志位
flag标志位有四种类型:
1、permanent:永久重定向,返回码为301
例:rewrite /test/ (.*)/ky30/$1 permanent;
只要访问test.index就会跳转到ky30.index
.*是什么,$1就是什么
永久重定向,客户端和服务器要经过两次请求,两次响应
2、redirect:临时重定向,显示的返回码为302
例:rewrite /test/ (.*) /ky30/$1 redirect;
总结:永久重定向的返回码为301,永久性的变更url,搜索引擎会转移他的权重以及排名到新的url
临时重定向的返回码为302,用于短期变更(用于网站维护,或升级更新)搜索引擎不会转移权重和排名到新的url
核心:返回码
返回码304表示获取的是本地的缓存
3、break:①是重定向,但是不会改变uri,而且只会请求一次
②立即停止匹配,跳出当前匹配,即刻终止
4、last:本条规则匹配完成后,继续向下匹配,只要有last就继续匹配,配置的时候要注意防止死循环