一、location匹配的规则和优先级(*)
URI:统一资源标识符,是一种字符串标识,用于标识抽象的或者是物理资源;如:文件、图片、视频等
nginx中的URI匹配的是:网址"/"后的路径 如:............/images/a.jpg
location就是用来匹配URI的
匹配方式
匹配方式 | |
---|---|
1、精确匹配: | location = / {......} |
2、正则匹配: | location ~ / {......} |
3、一般匹配: | location / {......} |
匹配规则
匹配规则: | |
---|---|
= | 精确匹配,完全匹配,不能错误一个字,必须要完全匹配 |
^~ | 匹配普通字符,前缀匹配 |
$~ | 结尾匹配 |
~ | 区分大小写的匹配 |
~* | 不区分大小写的匹配 |
!~ | 区分大小写的匹配,并且逻辑取反 |
!~* | 不区分大小写的取反 |
location匹配的原则:越精准,越匹配;同时优先级越高
总结:匹配的优先级------>越精准,优先级越高
location的优先级
location = :精确匹配
location ^~ :前缀匹配
location ~* : 正则匹配
location /xxx/ : 一般匹配的准确匹配
location / : 一般匹配
注意:一旦匹配成功,后续将不再匹配
工作中的location匹配规则
一、第一个 必选规则
location = / { }
原因:直接匹配根网站。直接通过域名访问首页是网站最常用的,直接使用精确匹配,可以加快处理,一般使用精确匹配处理的都是首页
二、第二个规则
location ^~ /static/ { }
处理静态文件的请求,目录匹配 (static为自定义)
三、
location ~* \.(gif | jpg | png | css)
匹配图片,但注意如果使用rewrite来指定后缀的类型,要在location定义中移除,不然会陷入死循环
四、通用规则
location / {
proxy_pass ------------指定代理、反向代理,转发动态请求,如php.jsp请求 ,发到后端
}
rewrite 重写、重定向
rewrite使用nginx的全局变量,或是自己设置的变量,结合正则表达式,和标志位实现URL的重定向
default_type text/plain;
表示如果没有在其他地方显示:content_type的头字段,默认响应为text/plain纯文本格式
text/html :默认的响应类型,也就是页面
text/plain :纯文本格式,类似.txt文件
text/css :css样式的类型:css
text/javascript:java脚本,.js。前端文件,也可以理解是iava解析的程序文件。
rewrite 执行顺序
1、执行service模块中的rewrite
2、执行location中的匹配
3、如果location当中还有rewrite,则会继续执行
注意:如果不停的rewrite,则只会循环执行10次,10次过后进行报错,返回状态码:500
rewrite的语法
rewrite <regex(正则)> <replacement> [flag(标志位)]
过程:
rewrite:开始重定向
regex:正则匹配的规则
replacement :表示跳转后内容,要重定向的URL
flag:标志位
标志位分为四种:
permanent :永久重定向、返回码301 ------ 永久性的变更URL,搜索引擎会转移他的权重,以及排名,到新的URL
redirect :临时重定向,返回码:302 ------ 用于短期变更(网站维护、升级、更新),搜索,是不会转移权重和排名
返回码:304 指的是获取的是本地缓存
break :重定向,但是不会改变原始的URL,内容会根据系统处理而显示重定向后的内容,并且只会请求一次,即刻跳出当前匹配,立即终止
last :表示本条匹配完成后,继续向下匹配,只要有last就会继续进行匹配,配置时需要注意,防止死循环
配置基于域名的跳转
首先进入nginx的配置文件 进行修改
vim /usr/local/nginx/conf/nginx.conf
server {
listen 80;
server_name www.zheng.cc;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
if ($host = 'www.zheng.cc') {
rewrite ^/(.*)$ http://www.bai.com/$1 permanent;
}
root html;
index index.html index.htm;
}
}
在本地hosts文件中写入配置的地址
echo "20.0.0.40 www.zheng.cc www.bai.com" >> /etc/hosts
重启nginx服务
systemctl restart nginx
测试:输入配置的地址 www.zheng.cc 后回车