location 通过前缀或正则匹配用户的URL访问路径做页面跳转、访问控制和代理转发
location URL路径 | 一般前缀匹配 |
location = URL路径 | 精准匹配 |
location ^~ URL路径 | 前缀匹配 |
location ~ URL路径 | 正则匹配,区分大小写 |
location ~* URL路径 | 正则匹配,不分区大小写 |
location !~ URL路径 | 正则匹配取反 |
location !~* URL路径 | 正则匹配取反,不分区大小写 |
精准匹配 = > 最长前缀匹配 ^~ > 正则匹配 ~ ~* !~ !~* > 一般前缀匹配 /XXXX > 通用匹配 /
在没有合适的精准匹配的情况下,先看前缀匹配的长度,取最长匹配的location(如果此最长匹配是带有^~的则不再看正则匹配;如果此最长匹配是不带有^~的则会继续再看正则匹配)
前缀匹配看长度,最长的优先匹配;正则匹配看上下顺序,根据nginx配置文件的配置由上往下依次匹配,匹配到即停止
#网站首页匹配
location = / {
root 网页根目录;
index index.html;
}#网站静态页面,通过前缀匹配或通用匹配在nginx服务器本地处理
location ~ /static/ {
root 目录;
}location / {
root 目录;
}#网站动态页面,通过匹配不同的动态网页文件后缀转发给不同的后端应用服务器处理
location \.php$ {
fastcgi_pass PHP服务器地址:端口;
}location \.jsp$ {
proxy_pass TOMCAT服务器地址:端口;
}
作用:对用户的URI访问路径进行地址重写,再重定向跳转访问重写后的路径
http://www.xy101.com/scj.jgp -> http://www.xy101.com/error.png
rewrite 正则表达式 重写的地址 [标记位];
last(匹配完了继续匹配)break(重写完了不再匹配)
permanent(301永久重定向,浏览器地址栏显示重写后的地址) redirect(301永久重定向,浏览器地址栏显示重写后的地址)
rewrite 正则表达式 /新URL; | http://域名/旧URL -> http://域名/新URL | #默认只对域名后面的URL部分重写 |
rewrite 正则表达式 http://新域名/新URL; | http://旧域名/旧URL -> http://新域名/新URL; | #如果需要全域名路径重写需要加上协议和域名 |
http://域名/旧URL --rewrite重写--> http://域名/新URL --> location匹配新URL路径跳转页面
rewrite 正则表达式 /新URL permanent; | #重写后会修改浏览器里的地址栏再重新访问 |
http://域名/旧URL --rewrite重写--> http://域名/新URL --> 浏览器地址栏也会改为 http://域名/新URL 再发起一次访问请求 --> location匹配新URL路径跳转页面
location ~ URL路径正则表达式 {
rewrite 正则表达式 重写的地址 [标记位];
}
$request_uri
if ($uri ~ URL路径正则表达式) {
rewrite 正则表达式 重写的地址 [标记位];
}
习题
习题:
(1)将请求http://www.xy101.com/abc/123.html 跳转到首页http://www.xy101.com
(2)将请求http://www.xy101.com/abc/test.jpg 跳转到http://www.xy101.com/error.png
(3)将请求http://www.xy102.com/discuz/index.php 跳转到http://www.xy101.com/discuz/index.php ,保证原域名后面的uri路径不变
(4)将请求http://discuz.xy101.com/index.php 的访问跳转到http://www.xy101.com/discuz/index.php ,保证原域名后面的uri路径不变
(5)将对http://www.xy101.com 网站的所有请求跳转到自定义的维护页面或图片,本地可以访问