location匹配规则
在nginx当中,匹配的对象一般是uri来匹配
location匹配的分类:
多个location一旦匹配其中之一,就不在匹配其他的location
1、精确匹配 location = / {…}
=:完全相同,一个字符错都匹配不到
2、正则匹配 location ~ / {…}
^~:表示普通字符的前缀匹配,如果匹配成功,不在匹配其他的location
~:区分大小写的字符匹配
~*:不区分大小写进行匹配
!~:区分大小写,匹配大的取非
!~ *:不区分大小写,匹配取非
3、一般匹配 location /
location匹配的优先级
精确匹配 > 正则匹配 > 一般匹配
location = > loction ^~ > location ~* > location /test1 > location /
网站匹配location的规则怎么做
1、location = / {}
直接匹配网站的根目录,也就是网站的首页。首页一般都是一个静态的页面,直接匹配可以提高访问的速度
2、处理静态文件的请求,通过前缀或者后缀进行匹配的规则
3、通用匹配:一般用来转发包含.php或者.jsp为结尾的动态请求
rewrite重定向
重定向:就是输入的网站之后会跳转到设定的目标网址
rewrite:使用nginx提供的全局变量或者是自己设置的变量,结合正则表达式和标志位实现url/uri重定向
1、更换域名
2、特殊情况,比如页面维护,但是不想中断服务,可以实现url跳转,访问正常服务器
3、防盗链
rewrite 跳转
1、ngx_http_rewrite_module支持url重定向
支持条件判断:
if语句,没有else
2、语法配置
rewrite正则表达式 跳转后的内容 标志位
标志位的类型
1、permanent:返回码是301,永久重定向
2、redirect:返回码302,临时重定向
3、break:跳转时不会改变url
break是按照location的规则进行匹配的,匹配到即终止,不属于3**开头的重定向范围之内
4、last:本条规则匹配完毕之后,继续向下匹配新的location机制
last一旦陷入死循环,内部循环10次就会停止,然后报错500
500:
1、服务器故障
2、防火墙屏蔽
3、应用的端口没有启动:
配置文件写错了
有其他应用占用了本服务的端口
服务器资源不够,应用无法启动
磁盘空间不足
4、last匹配机制导致陷入死循环,10次之后就会报错500
location /{rewrite /test/(.*) http://www.xy104.com/$1 redirect;
}
返回码301和302
301:永久重定向,永久性的变更url,搜索引擎的排名和权重会转移到新的url。客户端会保留新的url
302:临时重定向,短期的url变更,一般用在维护时搜索引擎的排名和权重不会转移到新的url,客户端会继续访问原始的url
练习
1、基于域名的跳转
www.xy105,com-------->www.xy104.com
cd /usr/local/nginx/conf
vim nginx.conf
server {listen 80;server_name www.xy105.com;...location / {if ( $host = 'www.xy105.com' ) {rewrite ^/(.*)$ http://www.xy104.com/$1 permanent;} root html;index index.html;}
}
保存退出
systemctl restart nginx
vim /etc/hosts
192.168.42.20 www.xy105.com www.xy104.com
保存退出
2、基于ip的跳转
192.168.42.20,这个服务器的网页正在维护,只有本机可以访问,其他主机访问统一显示正在维护中
cd /usr/local/nginx/conf
vim nginx.conf
server {
..charset utf-8set $rewrite true;if ( $remote_addr = '192.168.42.20') {set $rewrite false;}if ( $rewrite = true ) {rewrite (.+) /error.html;}location = /error.html {root html;}
}
systemctl restart nginx
cd ../html
vim error.html
正在维护中
3、基于后缀名跳转
cd /usr/local/nginx/conf
vim nginx.conf
location ~* \.php$ {rewrite ^(.*)\.php$ http://www.xy104.com permanent;
}