Nginx配置中的if判斷

2021-10-02 04:00:37 字數 1934 閱讀 1235

當rewrite的重寫規則滿足不了需求時,比如需要判斷當檔案不存在時、當路徑包含xx時等條件,則需要用到if

if (表示式)
表示式語法:

當表示式只是乙個變數時,如果值為空或任何以0開頭的字串都會當做false

直接比較變數和內容時,使用=或!=

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

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

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

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

為了配置if的條件判斷,這裡需要用到nginx中內建的全域性變數

$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_addr 客戶端的ip位址。

$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_addr 伺服器位址,在完成一次系統呼叫後可以確定這個值。

$server_name 伺服器名稱。

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

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

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

$document_uri 與$uri相同。

1、如果檔案不存在則返回400

if (!-f $request_filename)
2、如果host不是jouypub.com,則301到jouypub.com中

if ( $host != 'jouypub.com' )
3、如果請求型別不是post則返回405

if ($request_method = post)
4、如果引數中有a=1則301到指定網域名稱

if ($args ~ a=1)
5、在某種場景下可結合location規則來使用,如:

# 訪問 /test.html 時

location = /test.html

# 301

rewrite ^ /$name.html permanent;

}

上面表示:

/test.html => /xiaowu.html

/test.html?name=ok => /ok.html?name=ok

Nginx 中的配置命令

二 nginx rewrite 開頭表示精確匹配 開頭表示uri以某個常規字串開頭,不是正則匹配 開頭表示區分大小寫的正則匹配 開頭表示不區分大小寫的正則匹配 通用匹配,如果沒有其它匹配,任何請求都會匹配到 精確匹配,後面不能帶任何字元 server 匹配所有以 開頭請求 server 以開頭 ha...

Nginx中if語句中的判斷條件

一 if語句中的判斷條件 nginx 1 正規表示式匹配 等值比較 與指定正規表示式模式匹配時返回 真 判斷匹配與否時區分字元大小寫 與指定正規表示式模式匹配時返回 真 判斷匹配與否時不區分字元大小寫 與指定正規表示式模式不匹配時返回 真 判斷匹配與否時區分字元大小寫 與指定正規表示式模式不匹配時返...

Nginx中if語句中的判斷條件

一 if語句中的判斷條件 nginx 1 正規表示式匹配 等值比較 與指定正規表示式模式匹配時返回 真 判斷匹配與否時區分字元大小寫 與指定正規表示式模式匹配時返回 真 判斷匹配與否時不區分字元大小寫 與指定正規表示式模式不匹配時返回 真 判斷匹配與否時區分字元大小寫 與指定正規表示式模式不匹配時返...