首頁  >  文章  >  運維  >  Nginx Location指令URI符合規則是什麼

Nginx Location指令URI符合規則是什麼

WBOY
WBOY轉載
2023-05-14 23:58:191536瀏覽

1、介紹

location指令是http模組當中最核心的一項配置,根據預先定義的url匹配規則來接收用戶發送的請求,根據匹配結果,將請求轉送到後台伺服器、非法的請求直接拒絕並傳回403、404、500錯誤處理等。

2、location指令語法

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

3、uri符合模式

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

4、location uri符合規則

當nginx收到一個請求後,會截取請求的uri部份,去搜尋所有location指令中定義的uri符合模式。在server模組中可以定義多個location指令來匹配不同的url請求,多個不同location配置的uri匹配模式,總體的匹配原則是:先匹配普通字串模式,再匹配正規模式。只辨識uri部份,例如請求為:/test/abc/user.do?name=xxxx

一個請求過來後,nginx符合這個請求的流程如下:

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

2> 再找普通匹配,以最大前綴為原則,如有以下兩個location,則會匹配後一項
* location /test/ { … }
* location /test/abc { … }

3> 匹配到一個普通格式後,搜尋並未結束,而是暫存目前符合的結果,並繼續搜尋正規符合模式

4> 所有正規符合模式location中找到第一個符合項目後,就以此項為最終匹配結果
所以正規匹配項匹配規則,受定義的前後順序影響,但普通匹配模式不會

5> 如果未找到正則匹配項,則以3中快取的結果為最終匹配結果
6> 如果一個匹配都沒搜尋到,則返回404

5、精確匹配與模糊匹配差異
# location =/ { … } 與location / { … } 的差別:
* 前一個是精確匹配,只響應/請求,所有/xxx或/xxx/xxxx類的請求都不會以前綴的形式匹配到它
* 後一個是只要以/ 為前綴的請求都會被匹配到。如:/abc , /test/abc, /test/abc/aaaa

6、正規與非正則符合

1> location ~ /test /. .jsp$ { … } :正規匹配,支援標準的正規表示式語法。
2> location ^~ / { … } : ^~意思是關閉正規匹配,當搜尋到這個普通匹配模式後,將不再繼續搜尋正規匹配模式。

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

    location / {
      root  html;
      index index.html index.htm;
      # deny all; 拒绝请求,返回403
      # allow all; 允许请求
    }

    location /abc {
      deny all;
    }

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

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

    # 定义各类错误页
    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; #这种定义不允许,需求利用@定义临时变量来实现
    error_page 403 @page403;
    location @page403 {
      proxy_pass http://blog.csdn.net;
    } 
  }
}

以上是Nginx Location指令URI符合規則是什麼的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:yisu.com。如有侵權,請聯絡admin@php.cn刪除