Nginx核心教程之Nginx Rewrite語法規則和僞靜態規則詳解

文件及目錄匹配:

-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 路徑)

     只要匹配到,其它的都會忽略,然後返回到改匹配。

往期文章

Nginx系列教程(1)nginx基本介紹和安裝入門
Nginx系列教程(2)nginx搭建靜態資源web服務器
Nginx系列教程(3)nginx緩存服務器上的靜態文件
Nginx系列教程(4)nginx處理web應用負載均衡問題以保證高併發
Nginx系列教程(5)如何保障nginx的高可用性(keepalived)
Nginx系列教程(6)nginx location 匹配規則詳細解說
Nginx系列教程(7)nginx rewrite配置規則詳細說明
Nginx系列教程(8)nginx配置安全證書SSL
Nginx系列教程(9)nginx 解決session一致性

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章