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的大致使用方式和我的理解就寫到這了,對於前面的配置文件和目錄都是在上一篇博客寫的可以參考。