首頁 > 軟體

nginx 設定指令之location使用詳解

2022-05-24 14:03:54

Nginx是支援世界上所有網站三分之一的Web伺服器。因為輕巧,模組化,使用者友好的設定格式以強大的反向代理能力,Nginx迅速取代其他Web伺服器成了網際網路上最常用Web伺服器之。作為一個門戶和對外暴露的入口,Nginx也是Web服務在保障企業服務在效能和安全方面功不可沒,雖然Nginx也暴露過一些漏洞(比如CVE-2013-4547,CVE-2017-7529,CVE-2018-16843/16844,CVE-2019-9516和CVE-2020-12440等),但是基本上都無法直接(難於)利用。但是沒有漏洞,不等於不能被利用(同樣有漏洞,不等於可以利用)。Nginx最大的安全問題並不是其安全漏洞,而是在運維上面,尤其是錯誤設定導致的問題。本文我們就介紹nginx 設定指令之location使用。

前言

location 指令是http模組中非常重要的設定指令之一,Location是Nginx中的塊級指令(block directive),通過設定Location指令塊,可以決定使用者端發過來的請求URI如何處理(是對映到本地檔案還是轉發出去)及被哪個location處理

server { 
	listen 80; 
	server_name localhost; 
	location / { 
	}
	location /abc{
	}
	 ... 
 }

location

用來設定請求的 URI

設定策略

  • uri變數是待匹配的請求字串,可以不包含正規表示式,也可以包含正規表示式;
  • nginx伺服器在搜尋匹配location的時候,是先使用不包含正規表示式進行匹配,找到一個匹配度最高的一個,然後在通過包含正規表示式的進行匹配;
  • 如果能匹配到直接存取,匹配不到,就使用剛才匹配度最高的那個location來處理請求;

具體屬性介紹

1、不帶符號

要求必須以指定模式開始

server {
	listen 80;
	server_name 127.0.0.1;
	location /abc {
		default_type text/plain;
		return 200 "access success";
	}
}

在這種情況下,只要是以 /abc開頭的都能被匹配到,以下存取都是正確的

http://IP/abc
http://IP/abc?p1=TOM
http://IP/abc/
http://IP/abcdef

2、“= ”

= :用於不包含正規表示式的uri前,必須與指定的模式精確匹配

server {
	listen 80;
	server_name 127.0.0.1;
	location = /abc {
		default_type text/plain;
		return 200 "access success";
	}
}

在這種情況下,存取的路徑必須是以 /abc開頭才能正確被存取,如下是正常的,

 但是如果換成其他的路徑,就不對了

3、“~ ”

  • ~ : 用於表示當前uri中包含了正規表示式,並且區分大小寫 ~*: 用於表示當前uri中包含了正規表示式,並且不區分大小寫;
  • 換句話說,如果uri包含了正規表示式,需要用上述兩個符合來標識;

設定案例

server {
	listen 80;
	server_name 127.0.0.1;
	location ~^/abcw$ {
		default_type text/plain;
		return 200 "access success";
	}
}
server {
	listen 80;
	server_name 127.0.0.1;
	location ~*^/abcw$ {
		default_type text/plain;
		return 200 "access success";
	}
}

^~: 用於不包含正規表示式的 uri 前,功能和不加符號的一致,唯一不同的是,如果模式匹配,那麼就停止搜尋其他模式了。

到此這篇關於nginx 設定指令之location使用的文章就介紹到這了,更多相關nginx location使用內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com