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

上篇博客


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM