nginx內置變量-讓你更懂nginx
什么是nginx
nginx
nginx是一個(gè)開(kāi)源折、高性能的HTTP和反向代理服務(wù)器,由俄羅斯技術(shù)牛人伊戈爾·賽索耶夫開(kāi)發(fā),后將源代碼以類(lèi)BSD許可證的形式發(fā)布;因它的穩定性、支持高并發(fā)性、豐富的功能集、示例配置文件和低系統資源的消耗而聞名。它即可做web服務(wù)器、代理服務(wù)器,也可做負載均衡服務(wù)器。Nginx 可以在大多數 UnixLinux OS 上編譯運行,并有 Windows 移植版。
nginx做代理服務(wù)器架構圖
nginx內置變量
為了方便配置和使用nginx,nginx核心模塊ngx_http_core_module自帶有許多內置的人性化變量,這極大的方便了系統管理員對nginx維護和管理。下面我們詳解注解內置變量的含義(當然,如果你懂點(diǎn)HTTP知識的話(huà),就更好理解了):
$arg_name:請求中的的參數名,即“?”后面的arg_name=arg_value形式的arg_name。
$args:請求中的參數值。
$binary_remote_addr:客戶(hù)端地址的二進(jìn)制形式, 固定長(cháng)度為4個(gè)字節。
$body_bytes_sent:傳輸給客戶(hù)端的字節數,響應頭不計算在內;這個(gè)變量和Apache的mod_log_config模塊中的“%B”參數保持兼容。
$bytes_sent:傳輸給客戶(hù)端的字節數。
$connection:TCP連接的序列號。
$connection_requests:TCP連接當前的請求數量。
$content_length:“Content-Length”請求頭字段。
$content_type:“Content-Type”請求頭字段。
$cookie_name:cookie名稱(chēng)。
$document_root:當前請求的文檔根目錄或別名。
$document_uri:同下面的$uri。
$host:優(yōu)先級如下:HTTP請求行的主機名>”HOST”請求頭字段>符合請求的服務(wù)器名。
$hostname:主機名。
$http_name:匹配任意請求頭字段; 變量名中的后半部分“name”可以替換成任意請求頭字段,如在配置文件中需要獲取http請求頭:“Accept-Language”,那么將“-”替換為下劃線(xiàn),大寫(xiě)字母替換為小寫(xiě),形如:$http_accept_language即可。
$https:如果開(kāi)啟了SSL安全模式,值為“on”,否則為空字符串。
$is_args:如果請求中有參數,值為“?”,否則為空字符串。
$limit_rate:用于設置響應的速度限制,詳見(jiàn)limit_rate。
$msec:當前的Unix時(shí)間戳。
$nginx_version:nginx版本。
$pid:工作進(jìn)程的PID。
$pipe:如果請求來(lái)自管道通信,值為“p”,否則為“.”。
$proxy_protocol_addr:獲取代理訪(fǎng)問(wèn)服務(wù)器的客戶(hù)端地址,如果是直接訪(fǎng)問(wèn),該值為空字符串。
$query_string:同$args。
$realpath_root:當前請求的文檔根目錄或別名的真實(shí)路徑,會(huì )將所有符號連接轉換為真實(shí)路徑。
$remote_addr:客戶(hù)端地址。
$remote_port:客戶(hù)端端口。
$remote_user:用于HTTP基礎認證服務(wù)的用戶(hù)名。
$request:代表客戶(hù)端的請求地址。
$request_body:客戶(hù)端的請求主體。此變量可在location中使用,將請求主體通過(guò)proxy_pass, fastcgi_pass, uwsgi_pass, 和 scgi_pass傳遞給下一級的代理服務(wù)器。
$request_body_file:將客戶(hù)端請求主體保存在臨時(shí)文件中。文件處理結束后,此文件需刪除。如果需要之一開(kāi)啟此功能,需要設置client_body_in_file_only。如果將次文件傳遞給后端的代理服務(wù)器,需要禁用request body,即設置proxy_pass_request_body off,fastcgi_pass_request_body off, uwsgi_pass_request_body off, or scgi_pass_request_body off 。
$request_completion:如果請求成功,值為”OK”,如果請求未完成或者請求不是一個(gè)范圍請求的最后一部分,則為空。
$request_filename:當前連接請求的文件路徑,由root或alias指令與URI請求生成。
$request_length:請求的長(cháng)度 (包括請求的地址, http請求頭和請求主體) 。
$request_method:HTTP請求方法,通常為“GET”或“POST”。
$request_time:處理客戶(hù)端請求使用的時(shí)間 (1.3.9, 1.2.6); 從讀取客戶(hù)端的第一個(gè)字節開(kāi)始計時(shí)。
$request_uri:這個(gè)變量等于包含一些客戶(hù)端請求參數的原始URI,它無(wú)法修改,請查看$uri更改或重寫(xiě)URI,不包含主機名,例如:”/cnphp/test.php?arg=freemouse”。
$scheme:請求使用的Web協(xié)議,“http”或“https”。
$sent_http_name:可以設置任意http響應頭字段; 變量名中的后半部分“name”可以替換成任意響應頭字段,如需要設置響應頭Content-length,那么將“-”替換為下劃線(xiàn),大寫(xiě)字母替換為小寫(xiě),形如:$sent_http_content_length 4096即可。
$server_addr:服務(wù)器端地址,需要注意的是:為了避免訪(fǎng)問(wèn)linux系統內核,應將ip地址提前設置在配置文件中。
$server_name:服務(wù)器名,如www.baidu.com。
$server_port:服務(wù)器端口。
$server_protocol:服務(wù)器的HTTP版本, 通常為“HTTP/1.0”或“HTTP/1.1”。
$status:HTTP響應代碼。
$tcpinfo_rtt, $tcpinfo_rttvar, $tcpinfo_snd_cwnd, $tcpinfo_rcv_space:客戶(hù)端TCP連接的具體信息。
$time_iso8601:服務(wù)器時(shí)間的ISO 8610格式。
$time_local:服務(wù)器時(shí)間(LOG Format 格式)。
$uri:請求中的當前URI(不帶請求參數,參數位于$args),可以不同于瀏覽器傳遞的$request_uri的值,它可以通過(guò)內部重定向,或者使用index指令進(jìn)行修改,$uri不包含主機名,如”/foo/bar.html”。
寫(xiě)在最后
這些變量可以在配置文件中使用,方便你做各種nginx頁(yè)面代理,轉換,重寫(xiě),重定向等操作;而且還可以對nginx日志做自定義的日志配置,方便你對nginx日志的收集和分析(例如使用json格式的nginx配置,只選取你想要的字段收集到elasticsearch服務(wù)中,方便日后查看和分析)如下:
對nginx日志做自定義的字段格式化