Nginx-location的詳細使用


在沒有使用正則表達式的時候,nginx會先在server中的多個location選取匹配度最高的一個uri,uri是用戶請求的字符串,即域名后面的web文件路徑,然后使用該location模塊中的正則url和字符串,如果匹配成功就結束搜索,並使用此location處理此請求。

語法規則: location [=|~|~*|^~] /uri/ { … }
=   用於標准uri前,需要請求字串與uri精確匹配,如果匹配成功就停止向下匹配並立即處理請求。
~   用於標准uri前,表示包含正則表達式並且區分大小寫,並且匹配
!~  用於標准uri前,表示包含正則表達式並且區分大小寫,並且不匹配
~*  用於標准uri前,表示包含正則表達式並且不區分大寫,並且匹配
!~* 用於標准uri前,表示包含正則表達式並且不區分大小寫,並且不匹配
^~  用於標准uri前,表示包含正則表達式並且匹配以什么開頭
$   用於標准uri前,表示包含正則表達式並且匹配以什么結尾
\   用於標准uri前,表示包含正則表達式並且轉義字符。可以轉. * ?*   用於標准uri前,表示包含正則表達式並且代表任意長度的任意字符

匹配案例-精確匹配

在server部分使用location配置一個web界面,要求:當訪問nginx 服務器的/login的時候要顯示指定html文件的內容:

[root@s2 ~]# cat /apps/nginx/conf/conf.d/pc.conf
server {
listen 80;
server_name www.magedu.net;

location / {
 root /data/nginx/html/pc;
 }
location = /1.jpg {
 root /var/www/nginx/images;
 index index.html;
 }
}
上傳圖片到/var/www/nginx/images,重啟Nginx並訪問測試
訪問測試:http://www.magedu.net/1.jpg

匹配案例-區分大小寫

如果uri中包含大寫字母,則以下location匹配Ax.jpg條件不成功,因為~為區分大小寫,那么當用戶的請求被執行匹配時發現location中定義的是大寫的A,則匹配失敗,即要么繼續往下匹配其他的location(如果有),要么報錯給客戶端。

location ~ /A.?\.jpg { #匹配字母A開頭的圖片,后面?表示A后面零次或一個字符
 index index.html;
 root /opt/nginx/html/image;
 }
重啟Nginx並訪問測試 將只能訪問以小寫字符的AX.jpg圖片,不能識別大寫的JPG結尾的圖片 訪問測試:http:
//www.magedu.net/aA.jpg #直接訪問資源名稱即可

匹配案例-不區分大小寫

對用戶請求的uri做模糊匹配,也就是uri中無論都是大寫、都是小寫或者大小寫混合,此模式也都會匹配,通常使用此模式匹配用戶request中的靜態資源並繼續做下一步操作。

正則表達式匹配:
# location ~ /A.?\.jpg {
#  index index.html;
#  root /opt/nginx/html/image;
#  }
location ~* /A.?\.jpg {
3.3.4.4:匹配案例-URI開始:
 index index.html;
 root /opt/nginx/html/image;
 }
訪問測試:http://www.magedu.net/aA.jpg #直接訪問資源名稱即可
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
精確匹配指定名稱:
# location ~ /aa.jpg {
#  index index.html;
#  root /opt/nginx/html/image;
#  }
location ~* /aa.jpg {
 index index.html;
 root /opt/nginx/html/image;
 }
重啟Nginx並訪問測試 對於不區分大小寫的location,則可以訪問任意大小寫結尾的圖片文件,如區分大小寫則只能訪問aa.jpg,不區分大
小寫則可以訪問aa.jpg以外的資源比如Aa.JPG、aA.jPG這樣的混合名稱文件,但是要求nginx服務器的資源目錄有相應的文件,比如有Aa.JPG有aA.jPG。
重點:
Nginx匹配一次文件名是否區分大小寫
Nginx可以在服務器找到指定的資源

匹配案例-URI開始

location ^~ /images {
 root /data/nginx;
 index index.html;
 }
location /images1 {
 alias /data/nginx/html/pc;
 index index.html;
 } 
重啟Nginx並訪問測試,實現效果是訪問images和images1返回不同的結果
[root@s2 images]# curl http://www.magedu.net/images/
images
[root@s2 images]# curl http://www.magedu.net/images1/
pc web

匹配案例-文件名后綴

[root@s2 ~]# mkdir /data/nginx/images1
#上傳一個和images目錄不一樣內容的的圖片1.j到/data/nginx/images1
location
~* \.(gif|jpg|jpeg|bmp|png|tiff|tif|ico|wmf|js)$ { //此方法多用於動靜分離  root /data/nginx/images1;  index index.html; } 重啟Nginx並訪問測試

匹配案例-優先級

location ~* /1.jpg {
 index index.html;
 root /data/nginx/pc/html/linux38/images;
}
location = /1.jpg { #通常用於精確匹配指定文件,如favicon.ico、employcode.js、index.jsp等
 index index.html;
 root /data/nginx/pc/html/python/images;
}
上傳圖片到並重啟nginx訪問測試
匹配優先級:
=, ^~, ~/~*,/ location優先級:(location =) > (location 完整路徑) > (location ^~ 路徑) > (location ~,~*則順序) > (location 部分起始路徑) > (/)

生產使用案例

直接匹配網站根會加速Nginx訪問處理:
location = / {
 ......;
}
location / {
 ......;
}
靜態資源配置: location
^~ /static/ {  ......; } # 或者 location ~* \.(gif|jpg|jpeg|png|css|js|ico)$ {  ......; }
多應用配置,tomcat location
~* /app1 {   ......; } location ~* /app2 {   ......; }

 


免責聲明!

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



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