location语法:表示uri方式定位
基础语法有三种:
- location = pattern{} 精准匹配
- location pattern{} 一般匹配
- location ~ pattern{} 正则匹配
location正则表达式:
- "~ xxx":匹配访问的请求的URL中必须包含"xxx"
- "~* xXx":匹配忽略后面"xXx"是否大小写
- /xxx:匹配访问的请求的URL必须是"xxx"开头
- ^xxx:匹配访问的请求的URL前缀是"xxx"
- abc$:匹配访问的请求的URL是以abc结尾
- .*:任何请求
Nginx语法:
if(条件为:=~ ~*)
return:返回指定页面
break:退出,结束语句
rewrite:重写地址,转发到其他请求地址,其后必须跟break,否则转发失败(1、可隐藏实际访问地址,虚拟地址在nginx下转发至实际地址,2、请求分流[实例在下面:根据正则分流请求])
-f:是否为文件
-d:是否为目录
-e:是否存在
举例:
location ~ test {
# 重写语法:if return (条件 = ~ ~*)
#当访问地址IP为 192.168.1.40时,返回401页面
#场景:小的限制(黑名单、白名单、使用脚本禁用用户等)
if ($remote_addr = 192.168.1.200) {
return 401;
}
#当访问的浏览器是firefox时(~* firefox:忽略firefox大小写),将请求转发至firefox.html页面
if ($http_user_agent ~* firefox) {
rewrite ^.*$ /firefox.html;
break;
}
root bhz.com;
index index.html;
}
location /goods {
#goods-(d{1,5}).html:URLgoods开头,(d{1,5})是一个最小1位最大5位的数字(0-99999)
#例如:goods-12345.html,超出5位数字报页面404
#上面的地址重写(转发)到指定地址/goods-ctrl.html(可以指向一个动态URL或服务)
rewrite "goods-(d{1,5}).html" /goods-ctrl.html;
root bhz.com;
index index.html;
}
动静分离:
- 一个service(虚拟主机服务配置)可以配置多个location
- 静态的html、js、image、css等放入指定的静态目录下,当客户端访问nginx能匹配到当前正则表达式的location时,可对文件进行缓存,对网站优化很有用
- 当客户端访问动态的请求时,可通过特定的location进行反向代理来访问指定处理请求的服务器(tomcat等)
动态的请求访问web服务器(tomcat等)
静态的请求访问Nginx服务器(在root下放一堆静态文件)