溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Nginx Location指令URI匹配規(guī)則是什么

發(fā)布時(shí)間:2022-05-21 10:59:22 來(lái)源:億速云 閱讀:208 作者:zzz 欄目:大數(shù)據(jù)

本篇內(nèi)容主要講解“Nginx Location指令URI匹配規(guī)則是什么”,感興趣的朋友不妨來(lái)看看。本文介紹的方法操作簡(jiǎn)單快捷,實(shí)用性強(qiáng)。下面就讓小編來(lái)帶大家學(xué)習(xí)“Nginx Location指令URI匹配規(guī)則是什么”吧!

1、介紹

location指令是http模塊當(dāng)中最核心的一項(xiàng)配置,根據(jù)預(yù)先定義的url匹配規(guī)則來(lái)接收用戶發(fā)送的請(qǐng)求,根據(jù)匹配結(jié)果,將請(qǐng)求轉(zhuǎn)發(fā)到后臺(tái)服務(wù)器、非法的請(qǐng)求直接拒絕并返回403、404、500錯(cuò)誤處理等。

2、location指令語(yǔ)法

location [=|~|~*|^~|@] /uri/ { … } 或 location @name { … }

3、uri匹配模式

location指令分為兩種匹配模式:
1> 普通字符串匹配:以=開頭或開頭無(wú)引導(dǎo)字符(~)的規(guī)則
2> 正則匹配:以~或~*開頭表示正則匹配,~*表示正則不區(qū)分大小寫

4、location uri匹配規(guī)則

當(dāng)nginx收到一個(gè)請(qǐng)求后,會(huì)截取請(qǐng)求的uri部份,去搜索所有l(wèi)ocation指令中定義的uri匹配模式。在server模塊中可以定義多個(gè)location指令來(lái)匹配不同的url請(qǐng)求,多個(gè)不同location配置的uri匹配模式,總體的匹配原則是:先匹配普通字符串模式,再匹配正則模式。只識(shí)別uri部份,例如請(qǐng)求為:/test/abc/user.do?name=xxxx

一個(gè)請(qǐng)求過(guò)來(lái)后,nginx匹配這個(gè)請(qǐng)求的流程如下:

1> 先查找是否有=開頭的精確匹配,如:location = /test/abc/user.do { … }

2> 再查找普通匹配,以 最大前綴 為原則,如有以下兩個(gè)location,則會(huì)匹配后一項(xiàng)
* location /test/ { … }
* location /test/abc { … }

3> 匹配到一個(gè)普通格式后,搜索并未結(jié)束,而是暫存當(dāng)前匹配的結(jié)果,并繼續(xù)搜索正則匹配模式

4> 所有正則匹配模式location中找到第一個(gè)匹配項(xiàng)后,就以此項(xiàng)為最終匹配結(jié)果
所以正則匹配項(xiàng)匹配規(guī)則,受定義的前后順序影響,但普通匹配模式不會(huì)

5> 如果未找到正則匹配項(xiàng),則以3中緩存的結(jié)果為最終匹配結(jié)果
6> 如果一個(gè)匹配都沒(méi)搜索到,則返回404

5、精確匹配與模糊匹配差別
location =/ { … } 與 location / { … } 的差別:
* 前一個(gè)是精確匹配,只響應(yīng)/請(qǐng)求,所有/xxx或/xxx/xxxx類的請(qǐng)求都不會(huì)以前綴的形式匹配到它
* 后一個(gè)是只要以 / 為前綴的請(qǐng)求都會(huì)被匹配到。如:/abc , /test/abc, /test/abc/aaaa

6、正則與非正則匹配

1> location ~ /test/.+.jsp$ { … } :正則匹配,支持標(biāo)準(zhǔn)的正則表達(dá)式語(yǔ)法。
2> location ^~ / { … } : ^~意思是關(guān)閉正則匹配,當(dāng)搜索到這個(gè)普通匹配模式后,將不再繼續(xù)搜索正則匹配模式。

...
http {
  ...
  server {
    listen    80;
    server_name localhost;

    location / {
      root  html;
      index index.html index.htm;
      # deny all; 拒絕請(qǐng)求,返回403
      # allow all; 允許請(qǐng)求
    }

    location /abc {
      deny all;
    }

    location ~ /.+\.jsp$ {
      proxy_pass http://location:9090;
    }

    # 匹配所有/test路徑下的jsp文件
    location ~ /test/.+\.jsp$ {
      proxy_pass http://localhost:8080;
    }

    # 定義各類錯(cuò)誤頁(yè)
    error_page 404 /404.html

    error_page  500 502 503 504 /50x.html;
    location = /50x.html {
      root  html;
    }

    # @類似于變量定義
    # error_page 403 http://blog.csdn.net; #這種定義不允許,需求利用@定義臨時(shí)變量來(lái)實(shí)現(xiàn)
    error_page 403 @page403;
    location @page403 {
      proxy_pass http://blog.csdn.net;
    } 
  }
}

到此,相信大家對(duì)“Nginx Location指令URI匹配規(guī)則是什么”有了更深的了解,不妨來(lái)實(shí)際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI