Nginx的URL Rewrite基本指令

2021-09-05 08:34:17 字數 3053 閱讀 3968

1、nginx rewrite規則相關指令:

功能:實現url的重寫,通過rewrite規則,可以實現規範的url,根據變數來做url轉向及選擇配置。

作用範圍:server{},location{},if{}

優先順序:

執行server塊的rewrite指令 > 執行location匹配 >執行選定的location中的rewrite指令。

nginx rewrite規則相關指令有if、rewrite、set、return、break等,其中rewrite是最關鍵的指令。

1.1)break指令

語法:break

預設值:none

使用環境:server,location,if

作用:break 終止匹配, 不再匹配後面的規則

eg:

if (slow)
1.2)if指令語法:if(condition)

預設值:none

使用環境:server,location

作用:該指令用於檢測乙個條件是否符合,如果條件符合,則執行大括號內的語句。if指令不支援巢狀,不支援多個條件&&和||處理。

以下資訊可以被指定為條件:

(1)變數名,錯誤的值包括:空字串「」,或者任何以0開始的字串。

(2)變數比較可以使用「=」和「!=」(等於和不等於)運算子

(3)正規表示式模式匹配可以使用「~」和「~*」符號

(4)~  為區分大小寫匹配 

(5)~* 為不區分大小寫匹配 

(6)!~和!~*分別為區分大小寫不匹配及不區分大小寫不匹配

(7)-f和!-f用來判斷是否存在檔案 

(8)-d和!-d用來判斷是否存在目錄 

(9)-e和!-e用來判斷是否存在檔案或目錄 

(10)-x和!-x用來判斷檔案是否可執行

1.3)return指定:

語法:return code

預設值:none

使用環境:server,location,if

作用:該指令用於結束規則的執行並返回狀態碼給客戶端。狀態碼可以使用這些值:204、400、402-406、408、410、411、413、416、500-504.此外,非標準狀態碼444將以不傳送任何header頭的方式結束連線:

eg:訪問url以.sh和。bash結束,返回狀態碼403.

location `.*\.(sh|bash)?$

1.4)rewrite指令:語法: rewrite regex replacement flag

預設值:none

使用環境:server,location,if

作用:該指令根據變大時來重定向url,或者修改字串,指令根據配置檔案中的順序來執行。

rewrite指令的最後一下引數為flag標記,支援的flag標記有:

last 相當於apache裡的[l]標記,表示完成rewrite

break 本條規則匹配完成之後,終止匹配,不再匹配後面的規則。

redirect 返回302臨時重定向 位址列會顯示跳轉後的位址

permanent 返回301永久重定向 位址列會顯示跳轉後的位址

1.5)set指令:

語法:set variable value

預設值:none

使用環境:server,location,if

作用:該指令用於定義乙個變數,並給變數賦值,變數的值可以為文字,變數及文字變數的聯合。

eg:set $varname 'hello'

1.6) uninitalized_variable_warn指令:

語法:unitialized_variable_warn onloff

預設值:unitialized_variable_warn on

使用環境:http、server、location、if

作用:該指令用於開啟或者關閉未初始化變數的警告資訊,預設值為開啟。

1.7)nginx rewrite可以用到的全域性變數:

$args : #這個變數等於請求行中的引數,同$query_string

$content_length : 請求頭中的content-length欄位。

$content_type : 請求頭中的content-type欄位。

$document_root : 當前請求在root指令中指定的值。

$host : 請求主機頭欄位,否則為伺服器名稱。

$http_user_agent : 客戶端agent資訊

$http_cookie : 客戶端cookie資訊

$limit_rate : 這個變數可以限制連線速率。

$request_method : 客戶端請求的動作,通常為get或post。

$remote_port : 客戶端的埠。

$remote_user : 已經經過auth basic module驗證的使用者名稱。

$request_filename : 當前請求的檔案路徑,由root或alias指令與uri請求生成。

$scheme : http方法(如http,https)。

$server_protocol : 請求使用的協議,通常是http/1.0或http/1.1。

$server_name : 伺服器名稱。

$server_port : 請求到達伺服器的埠號。

$request_uri : 包含請求引數的原始uri,不包含主機名,如:」/foo/bar.php?arg=baz」。

$uri : 不帶請求引數的當前uri,$uri不包含主機名,如」/foo/bar.html」。

$document_uri : 與$uri相同。

Nginx 二 nginx的安裝

使用命令 tar zxvf pcre 8.37.tar.gz 進入pcre目錄 cd pcre 8.37 執行命令 configure 掃瞄依賴建立依賴 make 安裝 make install 檢視版本 pcre config version 成功 8.37 為版本號 執行命令 yum y ins...

nginx 二 nginx的安裝

把原始碼解壓縮之後,在終端裡執行如下命令 configure make make install 預設情況下,nginx 會被安裝在 usr local nginx。通過設定編譯選項,你可以改變這個設定 乙個寫好了的編譯選項 nginx的使用比較簡單,就是幾條命令。常用到的命令如下 nginx s ...

Nginx 實戰 nginx的日誌配置

nginx的錯誤日誌 nginx錯誤日誌平時不用太關注,但是一旦出了問題,就需要借助錯誤日誌來判斷問題所在。配置引數格式 error log path to log level nginx錯誤日誌級別 常見的錯誤日誌級別有debug info notice warn error crit alert...