檔案及目錄比對:
-f 和 !-f 用來判斷是否存在檔案
-d 和 !-d 用來判斷是否存在目錄
-e 和 !-e 用來判斷是否存在檔案或目錄
-x 和 !-x 用來判斷檔案是否可執行
正規表達式比對:
* ~ 為區分大小寫比對
* ~* 為不區分大小寫比對
* !~和!~*分别為區分大小寫不比對及不區分大小寫不比對
flag标記有:
last 相當于Apache裡的[L]标記,表示完成 rewrite
break 終止比對, 不再比對後面的規則
redirect 傳回302臨時重定向 位址欄會顯示跳轉後的位址
permanent 傳回301永久重定向 位址欄會顯示跳轉後的位址
一些可用的全局變量有,可以用做條件判斷:
$args
$content_length
$content_type
$document_root
$document_uri
$host
$http_user_agent
$http_cookie
$limit_rate
$request_body_file
$request_method
$remote_addr
$remote_port
$remote_user
$request_filename
$request_uri
$query_string
$scheme
$server_protocol
$server_addr
$server_name
$server_port
$uri
nginx變量及功能含義:
$arg_PARAMETER 功能:如果在請求中設定了查詢字元串,那麼這個變量包含在查詢字元串是GET請求PARAMETER中的值。
$args 功能:該變量的值是GET請求在請求行中的參數。
$binary_remote_addr 功能:二進制格式的用戶端位址
$body_bytes_sent 功能:響應體的大小,即使發生了中斷或者是放棄,也是一樣的準确。
$content_length 功能:該變量的值等于請求頭中的Content-length字段的值
$cookie_COOKIE 功能:該變量的值是cookie COOKIE的值
$document_root 功能:該變量的值為目前請求的location(http,server,location,location中的if)中root指令中指定的值。
$document_uri 功能:同$uri
$host 功能:該變量的值等于請求頭中Host的值。如果Host無效時,那麼就是處理該請求的server的名稱。
在下列情況中,$host變量的取值不同于$http_host變量。
當請求頭中的Host字段未指定(使用預設值)或者為空值,那麼$host等于server_name指令指定的值。
當Host字段包含端口是,$host并不包含端口号。另外,從0.8.17之後的nginx中,$host的值總是小寫。
$hostname 功能:有gethostname傳回值設定機器名。
$http_HEADER 功能:該變量的值為HTTP 請求頭HEADER,具體使用時會轉換為小寫,并且将“——”(破折号)轉換為"_"(下劃線)。
$is_args 功能: 如果設定了$args,那麼值為“?”,否則為“”
$limit_rate 功能:該變量允許限制連接配接速率。
$nginx_version 功能: 目前運作的nginx的版本号
$query_string 功能:同$args
$remote_addr 功能:用戶端的IP位址
$remote_user 功能: 該變量等于使用者的名字,基本身份驗證子產品使用。
$remote_port 功能: 用戶端連接配接端口
$request_filename 功能:該變量等于目前請求檔案的路徑,有指令root或者alias和URI構成。
$request_body 功能:該變量包含了請求體的主要資訊。該變量與proxy_pass或者fastcgi_pass相關。
$request_body_file 功能:用戶端請求體的臨時檔案。
$request_completion 功能:如果請求成功完成,那麼顯示“OK”。如果請求沒有完成或者請求不是該請求系列的最後一部分,那麼它的值為空。
$request_method 功能:該變量的值通常是GET或者POST。
$request_uri 功能:該變量的值等于原始的URI請求,就是說從用戶端收到的參數包括了原始請求的URI,該值是不可以被修改的,不包含主機名,例如“/foo/bar.php?arg=baz”。
$scheme 功能:該變量表示HTTP scheme(例如HTTP,HTTPS),根據實際使用情況來決定,
例如:rewrite ^ $scheme://example.com$uri redirect;
$server_addr 功能:該變量的值等于伺服器的位址。通常來說,在完成一次系統調用之後就會擷取變量的值,為了避開系統釣魚,那麼必須在listen指令中使用bind參數。
$server_name 功能:該變量為server的名字。
$server_port 功能:該變量等于接收請求的端口。
$server_protocol 功能:該變量的值為請求協定的值,通常是HTTP/1.0或者HTTP/1.1
$uri 功能:該變量的值等于目前請求中的URI(沒有參數,不包括$args)的值。它的值不同于request_uri,由浏覽器用戶端發送的request_uri的值。例如,可能會被内部重定向或者使用index。
另外需要注意:$uri不包含主機名,例如 "/foo/bar.html"
目前判斷URL= $scheme://$server_name/$url
location 比對的優先級(來自實踐總結中)
(location =) > (location 完整路徑 >) >(location ^~ 路徑) >(location ~* 正則) >(location 路徑)
隻要比對到,其它的都會忽略,然後傳回到改比對。