location语法介绍
location的详细使用
目录
在没有使⽤正则表达式的时候,nginx会先在server中的多个location选取匹配度最⾼的⼀个uri,uri是⽤⼾请求的字符串,即域名后⾯的web⽂件路径,然后使⽤该location模块中的正则url和字符串,如果匹配成功就结束搜索,并使⽤此location处理此请求。
语法规则: location [=|~|~*|^~] /uri/ { … }
= #⽤于标准uri前,需要请求字串与uri精确匹配,如果匹配成功就停⽌向下匹配并⽴即处理请求。
~ #⽤于标准uri前,表⽰包含正则表达式并且区分⼤⼩写,并且匹配
!~ #⽤于标准uri前,表⽰包含正则表达式并且区分⼤⼩写,并且不匹配
~* #⽤于标准uri前,表⽰包含正则表达式并且不区分⼤写,并且匹配
!~* #⽤于标准uri前,表⽰包含正则表达式并且不区分⼤⼩写,并且不匹配
^~ #⽤于标准uri前,表⽰包含正则表达式并且匹配以什么开头
$ #⽤于标准uri前,表⽰包含正则表达式并且匹配以什么结尾
\ #⽤于标准uri前,表⽰包含正则表达式并且转义字符。可以转. * ?等
* #⽤于标准uri前,表⽰包含正则表达式并且代表任意⻓度的任意字符
1. 匹配案例-精确匹配:
在server部分使⽤location配置⼀个web界⾯,要求:当访问nginx 服务器的/login的时候要显⽰指定html⽂件的内容:
# 上传一张图片到PC的网页目录下
[root@ubuntu ~]#rz -E
rz waiting to receive.
[root@ubuntu ~]#ll
total 712
drwx------ 4 root root 4096 Jan 7 16:10 ./
drwxr-xr-x 25 root root 4096 Jan 5 17:17 ../
-rw-r--r-- 1 root root 663409 Jan 7 16:08 0df37fc399e418555c7f002caf605594.jpg
-rw------- 1 root root 5374 Jan 5 19:58 .bash_history
-rw-r--r-- 1 root root 3147 Jan 3 21:22 .bashrc
drwx------ 2 root root 4096 Jan 3 20:45 .cache/
drwx------ 3 root root 4096 Jan 3 20:45 .gnupg/
-rw-r--r-- 1 root root 148 Aug 17 2015 .profile
-rw------- 1 root root 24921 Jan 7 16:10 .viminfo
-rw------- 1 root root 156 Jan 7 15:56 .Xauthority
[root@ubuntu ~]#mv 0df37fc399e418555c7f002caf605594.jpg /data/nginx/html/pc/1.jpg
# 修改配置文件添加一个location的精确匹配
[root@ubuntu ~]#vim /apps/nginx/conf/conf.d/pc.conf
server {
listen 80;
server_name www.OpengSD.net;
charset utf-8;
location / {
root /data/nginx/html/pc;
index index.html index.htm;
}
location = /1.jpg { # 在这里添加一个精确匹配的location
root /data/nginx/html/pc;
index index.html;
}
}
# 重启服务
[root@ubuntu ~]#systemctl restart nginx.service
- 访问测试
2. 匹配案例-区分⼤⼩写:
如果uri中包含⼤写字⺟,则此条件不匹配
# 修改配置文件匹配正则表达式写法
[root@ubuntu ~]#vim /apps/nginx/conf/conf.d/pc.conf
location ~ /Am.jpg {
root /data/nginx/html/pc;
index index.html;
}
[root@ubuntu ~]#mv /data/nginx/html/pc/1.jpg /data/nginx/html/pc/Am.jpg # 准备测试图片
[root@ubuntu pc]#cp Am.jpg AM.jpg
[root@ubuntu pc]#ll
total 1308
drwxr-xr-x 2 root root 4096 Jan 8 19:28 ./
drwxr-xr-x 4 root root 4096 Jan 5 19:18 ../
-rw-r--r-- 1 root root 663409 Jan 7 16:08 Am.jpg
-rw-r--r-- 1 root root 663409 Jan 8 19:28 AM.jpg
-rw-r--r-- 1 root root 176 Jan 5 18:51 index.html
[root@ubuntu ~]#systemctl restart nginx.service # 重启服务
- 报错
- 精确Am才可以访问
3. 匹配案例-不区分⼤⼩写:
对⽤⼾请求的uri做模糊匹配,也就是uri中⽆论都是⼤写、都是⼩写或者⼤⼩写混合,此模式也都会匹配,通常使⽤此模式匹配⽤⼾request中的静态资源并继续做下⼀步操作。
[root@ubuntu ~]#vim /apps/nginx/conf/conf.d/pc.conf
location ~* /Am.jpg {
root /data/nginx/html/pc;
index index.html;
}
[root@ubuntu pc]#ll # 测试页面
total 1308
drwxr-xr-x 2 root root 4096 Jan 8 19:39 ./
drwxr-xr-x 4 root root 4096 Jan 5 19:18 ../
-rw-r--r-- 1 root root 663409 Jan 7 16:08 1.jpg
-rw-r--r-- 1 root root 663409 Jan 8 19:38 am.jpg
-rw-r--r-- 1 root root 176 Jan 5 18:51 index.html
[root@ubuntu ~]#systemctl restart nginx.service
访问测试:http://www.OpengSD.net/aM.jpg #直接访问资源名称即可
--------------------------------------------------------
精确匹配指定名称:
# location ~ /am.jpg {
# index index.html;
# root /data/nginx/html/pc;
# }
location ~* /am.jpg {
index index.html;
root /data/nginx/html/pc;
}
重启Nginx并访问测试
对于不区分⼤⼩写的location,则可以访问任意⼤⼩写结尾的图⽚⽂件,如区分⼤⼩写则只能访问am.jpg,不区分⼤
⼩写则可以访问am.jpg以外的资源⽐如Am.JPG、aM.jPG这样的混合名称⽂件,但是要求nginx服务器的资源⽬录有
相应的⽂件,⽐如有Am.JPG有aM.jPG。
- 不区分大小写访问测试
- 精确匹配访问测试
4. 匹配案例-URI开始:
[root@ubuntu dc]#vim /apps/nginx/conf/conf.d/pc.conf
location ^~ /images {
root /data/nginx; # 以这个目录为根(调用路径/data/nginx/images/index.html)
index index.html;
}
location /images1 { # 这个目录可以没有,因为alias是重定向到下面这个文件夹里不访问images1。(调用路径/data/nginx/html/pc/index.html)
alias /data/nginx/html/pc;
index index.html;
}
[root@ubuntu ~]#/apps/nginx/sbin/nginx -t # 检查语法
nginx: the configuration file /apps/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /apps/nginx/conf/nginx.conf test is successful
[root@ubuntu dc]#mkdir /data/nginx/images
[root@ubuntu pc]#vim /data/nginx/images/index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>taotaobao 博客</title>
</head>
<body>
<h2>images</h2>
</body>
</html>
[root@ubuntu pc]#vim /data/nginx/html/pc/index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>taotaobao 博客</title>
</head>
<body>
<h2>淘淘宝博客PC网址</h2>
</body>
</html>
- images测试访问
- images1测试访问
5. 匹配案例-文件名后缀:
[root@ubuntu images1]#vim /apps/nginx/conf/conf.d/pc.conf
location ~* \.(gif|jpg|jpeg|bmp|png|tiff|tif|ico|wmf|js)$ {
root /data/nginx/images1;
index index.html;
}
[root@ubuntu ~]#mkdir /data/nginx/images1
[root@ubuntu ~]#cd /data/nginx/images1
[root@ubuntu images1]#rz -E
rz waiting to receive.
[root@ubuntu images1]#ll
total 3916
drwxr-xr-x 2 root root 4096 Jan 9 12:25 ./
drwxr-xr-x 5 root root 4096 Jan 9 12:18 ../
-rw-r--r-- 1 root root 4001776 Jan 9 12:25 抽象风景,树,房子,草地,风景图片_彼岸图网.jpg
[root@ubuntu images1]#mv 抽象风景,树,房子,草地,风景图片_彼岸图网.jpg 1.jpg
[root@ubuntu images1]#rz -E
rz waiting to receive.
[root@ubuntu images1]#ll
total 10092
drwxr-xr-x 2 root root 4096 Jan 9 12:53 ./
drwxr-xr-x 5 root root 4096 Jan 9 12:18 ../
-rw-r--r-- 1 root root 4001776 Jan 9 12:25 1.jpg
-rw-r--r-- 1 root root 6322551 Jan 9 12:53 Devils_Bridge_桥梁和绿色树木_河流_倒映6k自然风景壁纸_彼岸图网.jpg
[root@ubuntu images1]#mv Devils_Bridge_桥梁和绿色树木_河流_倒映6k自然风景壁纸_彼岸图网.jpg 1.png
[root@ubuntu images1]#ll
total 10092
drwxr-xr-x 2 root root 4096 Jan 9 12:54 ./
drwxr-xr-x 5 root root 4096 Jan 9 12:18 ../
-rw-r--r-- 1 root root 4001776 Jan 9 12:25 1.jpg
-rw-r--r-- 1 root root 6322551 Jan 9 12:53 1.png
[root@ubuntu images1]#systemctl restart nginx.service
- 访问测试
6. 匹配案例-优先级:
[root@ubuntu ~]#vim /apps/nginx/conf/conf.d/pc.conf
location ~* /1.jpg {
root /data/nginx/images;
index index.html;
}
location = /1.jpg {
root /data/nginx/html/pc;
index index.html;
}
# 注释掉精确匹配在测试一次查看images文件夹的图片
#location = /1.jpg {
# root /data/nginx/html/pc;
# index index.html;
#}
匹配优先级:=, ^~, ~/~*,/
location优先级:(location =) > (location 完整路径) > (location ^~ 路径) > (location ~,~* 正则顺序) > (location 部分起始路径) > (/)
- 访问的是精确匹配对应的图片
- 注释测试
以此得出精确匹配的优先级高于模糊匹配
7. 生产使用案例:
直接匹配网站根会加速Nginx访问处理:
location = / {
......;
}
location / {
......;
}
静态资源配置:
location ^~ /static/ {
......;
}
# 或者
location ~* \.(gif|jpg|jpeg|png|css|js|ico)$ {
......;
}
多应用配置
location ~* /app1 {
......;
}
location ~* /app2 {
......;
}
location的大致使用方式和我的理解就写到这了,对于前面的配置文件和目录都是在上一篇博客写的可以参考。