一、location指令基本概念
在Nginx中,location指令用於匹配客戶端請求的URL,並根據匹配規則進行轉發或請求處理。其基本語法如下:
location [=|~|~*|^~] uri { }
location / { }
location ~ /\.ht { deny all; }
其中location後面緊跟匹配模式,可以是常規字元串、正則表達式、以及4種轉發匹配模式(=、~、~*、^~)。
在正常情況下,Nginx會根據請求URI匹配location指令中 uri 字元串作為前綴的模式。例如:
location /abc { # 匹配以 /abc 開頭的URI }
還有一些特殊的匹配模式,如:
- = 表示嚴格匹配
- ~ 表示正則表達式模式(區分大小寫)
- ~* 表示正則表達式模式(不區分大小寫)
- ^~ 表示普通字元串匹配(如果該字元串在正則表達式匹配之前被匹配,則停止對後面的正則表達式的匹配)
二、多個location的配置實例
1. 獨立的多個location
在同一伺服器下存在多個location的時候,需要用 server 配置塊區分不同的虛擬主機,如下例子:
server {
listen 80;
server_name www.example.com;
location / {
root /data/www;
index index.html;
}
location /images/ {
root /data;
}
}
上述配置中,「location /」表示默認處理請求,訪問 / 時,會使用root指令中的目錄,查找不存在會按照index指令中的順序查找index文件。
而「location /images/」表示對以 /images/ 開頭的 URL 進行匹配,會使用root指令中的目錄。
2. 重寫 URL:多級目錄
在配置 url 重寫時,常見的情況是匹配url的前幾個字元,然後將剩下的字元串作為參數傳遞到後端的處理程序中。這種情況下,就需要使用正則表達式。
location ~ ^/users/(.*)$ {
proxy_pass http://localhost:8000/$1;
}
上述配置將匹配所有以 /users/ 開頭的 URL,將 URL 的剩餘部分的作為參數,傳遞到後端的http://localhost:8000/ 中進行處理。
3. RESTful API:根據請求方法匹配 location
在實際業務場景中,API服務經常是採用 RESTful 方式來編寫的,這個時候可以採用請求方法進行匹配並轉發請求。如下例子:
location /something {
if ($request_method = 'POST') {
proxy_pass http://backend;
}
if ($request_method = 'GET') {
proxy_pass http://frontend;
}
}
上述配置中,如果是POST方法,則轉發到http://backend,否則轉發到http://frontend。
4. 靜態文件和緩存控制
在使用Nginx作為反向代理伺服器的場景下,使用location可以對靜態文件的請求進行處理,如下例子:
location /images/ {
root /data/www;
expires 30d;
add_header Pragma public;
add_header Cache-Control "public";
}
上述配置中,假設root目錄中存在 /data/www/images/icon.png 文件,當客戶端請求URL 「www.example.com/images/icon.png」 時,Nginx將會在/data/www/images/ 路徑下尋找icon.png文件,然後返回給客戶端。同時,添加了Cache-Control和Pragma頭部欄位,以更好地控制緩存。
三、小結
通過以上實例,相信大家已經了解了Nginx的location指令的用法,僅僅以上實例並不是全部,開發工程師可以根據實際需求進行更多的配置方法。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/240261.html