一、location的匹配语法以及规则
基本语法
location [=|^~|~|~*] uri { ... }
location的匹配语法分成两个部分,[]括号中的是匹配符,决定以何种方式进行匹配,uri表示请求路径,例如http://www.baidu.com:8081/index/的就是/abc/
匹配修饰符
匹配修饰符分为两种字符串匹配:= ^~和正则匹配:~ ~*
- = :location = /index 匹配的就是/index,精确(严格)匹配
- ^~ : location ^~ /index/ 匹配的是以/index开头的就行,非正则匹配(依然遵循最大前缀匹配规则),匹配后就不继续匹配了
- ~ : location ~ index[0-9] 表示区分大小写的正则匹配 匹配 /index23 /aa/index23 /aa/index22/bb
- ~* : location ~* index[0-9] 表示不区分大小写的正则匹配 匹配 /index23 /aa/inDex2, 匹配后仍继续匹配,取最长规则命中
location 配置
location / {
root html;
index index.html index.hml;
try_files $uri /filePath...;
}
root 项目文件根路径
index 默认显示的文件,文件地址相对root配置
try_files 尝试以给定$uri响应请求,如果 $uri没有不存在,则使用下一个配置文件响应。如果所有给定的文件都没有则返回404。注意文件路径需要加/
url反向代理
location /index {
// 这里只能替换ip和端口,即便设置成http://127.0.0.1:80/index2 也只替换ip和端口
proxy_pass http://127.0.0.1:80;
//break 执行本条匹配后不在执行后面的匹配,一般用在server或if中
//last 执行本条匹配后继续下次匹配
//redirect 返回302临时重定向,地址栏会显示跳转后的地址;
//permanent 返回301永久重定向,地址栏会显示跳转后的地址;
rewrite /index /index2 break;
// 使用正则表达式 $1为匹配到的值,在此为/index,本语句将/index => /index/index2
rewrite ^\/index $1/index2;
}