nginx變量

與request有關(guān)的變量

1净当,$arg_name

請(qǐng)求行中,名稱為name的參數(shù)的值蕴潦。比如像啼,當(dāng)請(qǐng)求行是"GET /nginx/varindex/?from=rss HTTP/1.1"時(shí),arg_from的值是"rss"潭苞。當(dāng)請(qǐng)求行中沒有名稱為*name*的參數(shù)時(shí)忽冻,arg_name的值是空字符串

2,$is_args

如果請(qǐng)求行中包含參數(shù)萄传,那么$is_args的值是"?"甚颂,否則是空字符串

3蜜猾,args秀菱、query_string

請(qǐng)求行中的全部參數(shù)(也就是查詢字符串)。比如蹭睡,當(dāng)請(qǐng)求行是"GET /nginx/varindex/?a=b&c=d HTTP/1.1"時(shí)衍菱,args的值是a=b&c=d。當(dāng)請(qǐng)求行中沒有任何參數(shù)時(shí)肩豁,args的值是空字符串

4脊串,$cookie_name

名稱為name的cookie的值

5辫呻,$request

完整的原始的請(qǐng)求行。比如:"GET /b/../a?a=b HTTP/1.1"(uri不會(huì)被規(guī)范化)

6琼锋,$http_name

用來獲取任意請(qǐng)求頭的值放闺。
HTTP header的命名方式是:每個(gè)單詞的首字母大寫,其余字母小寫缕坎,單詞之間用中劃線("-")連接怖侦。比如,User-Agent谜叹、Content-Type匾寝、X-Forwarded-For等。
請(qǐng)求頭名稱和name之間的轉(zhuǎn)換方式是:將請(qǐng)求頭名稱轉(zhuǎn)換成小寫形式荷腊,并將中劃線("-")替換成下劃線("_")艳悔,比如:$http_x_forwarded_for

7,$request_length

請(qǐng)求的長(zhǎng)度女仰,包含請(qǐng)求行猜年、請(qǐng)求頭和請(qǐng)求體

8,$request_method

請(qǐng)求方法疾忍,比如GET或POST

9码倦,$request_uri

完整的原始的URI(帶參數(shù))

10,$scheme

請(qǐng)求模式锭碳,http或https

11袁稽,$content_length

"Content-Length"請(qǐng)求頭的值

12,$content_type

"Content-Type"請(qǐng)求頭的值

13擒抛,$document_root

應(yīng)用于當(dāng)前請(qǐng)求的root或alias指令的值

14推汽,document_uri、uri

規(guī)范化后的URI歧沪。所謂的規(guī)范化是指:將 以"%XX"形式編碼的文本進(jìn)行解碼 之后歹撒,解決對(duì)相對(duì)地址"."和".."的引用,并將多個(gè)相鄰的"/"壓縮成一個(gè)诊胞。
請(qǐng)求處理期間暖夭,$uri的值可能發(fā)生改變,比如在發(fā)生內(nèi)部重定向或者使用index文件的時(shí)候

15撵孤,$host

Nginx按照下面的優(yōu)先級(jí)順序迈着,設(shè)置$host的值:

  • 從請(qǐng)求行中獲取到的主機(jī)名
  • 從"Host"請(qǐng)求頭中獲取到的主機(jī)名
  • 處理請(qǐng)求的虛擬主機(jī)的名稱

一般情況下,請(qǐng)求行中只會(huì)包含 Request URI 邪码,也就是 URI 和 QUERY STRING 裕菠,不會(huì)包含 host name。但是闭专,當(dāng)使用Nginx做HTTP正向代理服務(wù)器的時(shí)候奴潘,請(qǐng)求行中會(huì)包含host name

16旧烧,$proxy_add_x_fowarded_for

在客戶端傳遞來的X-Forwarded-For請(qǐng)求頭后面追加remote_addr(用逗號(hào)分隔)。如果客戶端沒有傳遞X-Forwarded-For請(qǐng)求頭画髓,那么該變量等于remote_addr掘剪。
比如,客戶端傳遞來的XFF請(qǐng)求頭是:192.168.1.1, 192.168.1.2奈虾;remote_addr是192.168.1.3杖小。那么proxy_add_x_forwarded_for等于192.168.1.1, 192.168.1.2, 192.168.1.3

17,$realpath_root

應(yīng)用于當(dāng)前請(qǐng)求的root或alias指令的值所對(duì)應(yīng)的絕對(duì)路徑愚墓,所有的符號(hào)連接都會(huì)被解析成真實(shí)路徑

18予权,$server_protocol

請(qǐng)求協(xié)議,通常是"HTTP/1.0"浪册、"HTTP/1.1"扫腺、"HTTP/2.0"

19,$request_filename

當(dāng)前請(qǐng)求對(duì)應(yīng)的資源的路徑村象。
該變量的值是基于root(或alias)指令的值笆环,以及請(qǐng)求的URI計(jì)算出來的。比如厚者,當(dāng)root指令的值是/data/w3躁劣,URI是/images/logo.jpg時(shí),該變量等于/data/w3/images/logo.jpg


與response有關(guān)的變量

1库菲,$body_bytes_sent

下發(fā)給客戶端的字節(jié)數(shù)(不包含響應(yīng)頭)

2账忘,$request_time

從 接收到請(qǐng)求的第一個(gè)字節(jié) 到 把響應(yīng)的最后一個(gè)字節(jié)發(fā)送給客戶端,所經(jīng)歷的時(shí)間熙宇。單位是秒鳖擒,精確到毫秒

3,$send_http_name

用于獲取下發(fā)給客戶端的任意響應(yīng)頭的值烫止。響應(yīng)頭名稱和name之間的轉(zhuǎn)換方式是:將響應(yīng)頭名稱轉(zhuǎn)換成小寫形式蒋荚,并將中劃線("-")替換成下劃線("_")

4,$status

下發(fā)給客戶端的響應(yīng)碼


常用變量

1馆蠕,$binary_remote_addr

二進(jìn)制形式的客戶端地址期升。對(duì)于IPV4地址,該值的長(zhǎng)度是4字節(jié)互躬,對(duì)于IPV6地址該值的長(zhǎng)度是16字節(jié)

2播赁,$connection

連接的序號(hào)

3,$connection_requests

在開啟keepalive的情況下吨铸,客戶端可以使用一條連接發(fā)起多個(gè)請(qǐng)求行拢,該變量用于記錄通過一條連接發(fā)起的請(qǐng)求數(shù)

4,$date_local

本地時(shí)區(qū)的當(dāng)前時(shí)間

5诞吱,$date_gmt

GMT格式的當(dāng)前時(shí)間

6舟奠,$hostname

運(yùn)行Nginx的主機(jī)的主機(jī)名,比如:vm016_centos

7房维,$msec

當(dāng)前的時(shí)間戳沼瘫,精確到毫秒。比如咙俩,1551609371.088

8耿戚,$nginx_version

Nginx的版本號(hào)

9,$pid

Worker進(jìn)程的PID

10阿趁,$proxy_host

在proxy_pass指令中指定的被代理服務(wù)的名稱(可能是upstream的名稱)

11膜蛔,$proxy_port

在proxy_pass指令中指定的被代理服務(wù)的端口。如果在proxy_pass指令中未指定端口脖阵,那么該變量等于協(xié)議的默認(rèn)端口

12皂股,$remote_addr

客戶端地址

13,$remote_port

客戶端端口

14命黔,$remote_user

在開啟basic authentication的時(shí)候呜呐,客戶端所使用的用戶名

15,$server_addr

接收請(qǐng)求的虛擬主機(jī)的地址

16悍募,$server_port

接收請(qǐng)求的虛擬主機(jī)的端口

17蘑辑,$server_name

接收請(qǐng)求的虛擬主機(jī)的名稱

18,$time_iso8601

ISO 8601標(biāo)準(zhǔn)格式的本地時(shí)間

19坠宴,$time_local

通用日志格式的本地時(shí)間


與upstream相關(guān)的變量

1洋魂,$upstream_addr

保存upstream server的ip地址和端口,或Unix套接字的路徑喜鼓。在請(qǐng)求處理期間忧设,如果請(qǐng)求被代理到多個(gè)upstream server,那么它們的地址之間用","分隔颠通,比如:"192.168.1.1:80, 192.168.1.2:80, unix:/tmp/sock"址晕。當(dāng)發(fā)生(由error_page等發(fā)起的)從一個(gè)server group到另外一個(gè)server group的內(nèi)部重定向時(shí),不同的server group之間用":"分隔顿锰,比如:"192.168.1.1:80, 192.168.1.2:80, unix:/tmp/sock : 192.168.10.1:80, 192.168.10.2:80"谨垃。如果server group中沒有可用的server,那么該變量的值是server group的名字

2硼控,$upstream_bytes_received

從upstream server接收到的字節(jié)數(shù)刘陶。來自于多個(gè)連接的值,像$upstream_addr中的地址一樣牢撼,用","和":"分隔

3匙隔,$upstream_bytes_sent(Nginx 1.15.8 起 可用)

發(fā)送到upstream server的字節(jié)數(shù)。來自多個(gè)連接的值熏版,像$upstream_addr中的地址一樣纷责,用","和":"分隔

4捍掺,$upstream_cache_status

該變量用來顯示緩存的使用情況。其值是:

  • HIT:命中緩存

  • MISS:未命中緩存

  • EXPIRED:緩存已過期

  • BYPASS:客戶端強(qiáng)制不使用緩存

  • STALE:使用了過期的緩存再膳⊥ξ穑可以通過proxy_cache_use_stale指令,指定在什么情況下喂柒,使用過期的緩存不瓶,比如http_502、error灾杰、timeout等

  • UPDATING:緩存正在更新

  • REVALIDATE:緩存重新生效
    在啟用客戶端緩存的情況下蚊丐,服務(wù)端可以通過以下兩種方式,來判斷客戶端的緩存是否失效:

    • ETag響應(yīng)頭 和 If-None-Match請(qǐng)求頭

    • Last-Modified響應(yīng)頭 和 If-Modified-Since請(qǐng)求頭當(dāng)客戶端訪問一個(gè)URL的時(shí)候艳吠,如果客戶端沒有緩存或緩存失效麦备,那么服務(wù)端會(huì)下發(fā)資源,以及Last-Modified(資源的最后修改時(shí)間)和ETag(Entity Tag讲竿,服務(wù)端計(jì)算的資源指紋泥兰,當(dāng)資源發(fā)生改變時(shí),ETag也會(huì)改變)響應(yīng)頭题禀。
      以后鞋诗,客戶端再訪問該URL時(shí),會(huì)帶上If-Modified-Since和If-None-Match請(qǐng)求頭迈嘹。其中削彬,If-Modified-Since的值是上次返回的響應(yīng)中的Last-Modified頭的值,If-None-Match的值是上次返回的響應(yīng)中的ETag頭的值秀仲。
      下面是Nginx的處理流程融痛,與別的文檔的描述不同,Nginx的相關(guān)源碼在:github神僵,Mozilla的說明在:MDN

    • 如果存在IMS請(qǐng)求頭雁刷,并且IMS的值小于資源的最后修改時(shí)間,那么返回200保礼,以及新的ETag和Last-Modified

    • 如果存在INM請(qǐng)求頭沛励,并且資源的ETag值與INM的值不匹配,那么返回200炮障,以及新的Etag和Last-Modified

    • 否則目派,認(rèn)為資源未被修改,返回304胁赢,以及空的響應(yīng)體當(dāng)開啟proxy_cache_revalidate時(shí)企蹭,Nginx會(huì)通過If-Modified-Since和If-None-Match請(qǐng)求頭,來使過期的緩存條目重新生效

5,$upstream_connect_time

建立到upstream server的連接所花費(fèi)的時(shí)間谅摄。單位是秒徒河,精確到毫秒。對(duì)于SSL連接螟凭,該時(shí)間也包含SSL握手所花費(fèi)的時(shí)間虚青。建立多個(gè)連接所花費(fèi)的時(shí)間之間它呀,像$upstream_addr中的地址一樣螺男,用","和":"分隔

6,$upstream_cookie_name

upstream server返回的"Set-Cookie"響應(yīng)頭中的纵穿,名稱name的cookie的值下隧。只有最后一個(gè)server返回的響應(yīng)中的cookie會(huì)被保存

7,$upstream_header_time

從upstream server接收響應(yīng)頭所花費(fèi)的時(shí)間谓媒。單位是秒淆院,精確到毫秒。多個(gè)響應(yīng)所花費(fèi)的時(shí)間之間句惯,像$upstream_addr中的地址一樣土辩,用","和":"分隔

8,$upstream_http_name

用于獲取upstream server返回的任意響應(yīng)頭的值抢野。
響應(yīng)頭名稱和name之間的轉(zhuǎn)換方式是:將響應(yīng)頭名稱轉(zhuǎn)換成小寫形式拷淘,并將中劃線替換成下劃線。
只有最后一個(gè)server的響應(yīng)頭會(huì)被保存

9指孤,$upstream_response_length

保存從upstream server獲取到的響應(yīng)的長(zhǎng)度启涯。單位是字節(jié)。多個(gè)響應(yīng)的長(zhǎng)度之間恃轩,像$upstream_addr中的地址一樣结洼,用","和":"分隔

10,$upstream_response_time

保存從upstream server接收響應(yīng)所花費(fèi)的時(shí)間叉跛。單位是秒松忍,精確到毫秒。多個(gè)響應(yīng)所花費(fèi)的時(shí)間之間筷厘,像$upstream_addr中的地址一樣鸣峭,用","和":"分隔

11,$upstream_status

保存從upstream server獲取到的響應(yīng)的狀態(tài)碼敞掘。多個(gè)響應(yīng)的狀態(tài)碼之間叽掘,像$upstream_addr中的地址一樣,用","和":"分隔

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末玖雁,一起剝皮案震驚了整個(gè)濱河市更扁,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖浓镜,帶你破解...
    沈念sama閱讀 217,509評(píng)論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件溃列,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡膛薛,警方通過查閱死者的電腦和手機(jī)听隐,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,806評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來哄啄,“玉大人雅任,你說我怎么就攤上這事∽傻” “怎么了沪么?”我有些...
    開封第一講書人閱讀 163,875評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)锌半。 經(jīng)常有香客問我禽车,道長(zhǎng),這世上最難降的妖魔是什么刊殉? 我笑而不...
    開封第一講書人閱讀 58,441評(píng)論 1 293
  • 正文 為了忘掉前任殉摔,我火速辦了婚禮,結(jié)果婚禮上记焊,老公的妹妹穿的比我還像新娘逸月。我一直安慰自己,他們只是感情好亚亲,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,488評(píng)論 6 392
  • 文/花漫 我一把揭開白布彻采。 她就那樣靜靜地躺著,像睡著了一般捌归。 火紅的嫁衣襯著肌膚如雪肛响。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,365評(píng)論 1 302
  • 那天惜索,我揣著相機(jī)與錄音特笋,去河邊找鬼。 笑死巾兆,一個(gè)胖子當(dāng)著我的面吹牛猎物,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播角塑,決...
    沈念sama閱讀 40,190評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼蔫磨,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了圃伶?” 一聲冷哼從身側(cè)響起堤如,我...
    開封第一講書人閱讀 39,062評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤蒲列,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后搀罢,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體蝗岖,經(jīng)...
    沈念sama閱讀 45,500評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,706評(píng)論 3 335
  • 正文 我和宋清朗相戀三年榔至,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了抵赢。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,834評(píng)論 1 347
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡唧取,死狀恐怖铅鲤,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情兵怯,我是刑警寧澤彩匕,帶...
    沈念sama閱讀 35,559評(píng)論 5 345
  • 正文 年R本政府宣布腔剂,位于F島的核電站媒区,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏掸犬。R本人自食惡果不足惜袜漩,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,167評(píng)論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望湾碎。 院中可真熱鬧宙攻,春花似錦、人聲如沸介褥。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,779評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽柔滔。三九已至溢陪,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間睛廊,已是汗流浹背形真。 一陣腳步聲響...
    開封第一講書人閱讀 32,912評(píng)論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留超全,地道東北人咆霜。 一個(gè)月前我還...
    沈念sama閱讀 47,958評(píng)論 2 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像嘶朱,于是被迫代替她去往敵國和親蛾坯。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,779評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容