国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【Nginx15】Nginx學(xué)習(xí):HTTP核心模塊(十二)內(nèi)嵌變量

這篇具有很好參考價值的文章主要介紹了【Nginx15】Nginx學(xué)習(xí):HTTP核心模塊(十二)內(nèi)嵌變量。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報違法"按鈕提交疑問。

Nginx學(xué)習(xí):HTTP核心模塊(十二)內(nèi)嵌變量

關(guān)于內(nèi)嵌變量,其實(shí)就是 Nginx 開放給我們的在配置文件中可以使用的變量。源碼中無非就是替換成真實(shí)的代碼變量進(jìn)行操作。這些變量可以幫助我們做很多事情。之前的文章中其實(shí)也有不少地方用到了,比如說?$uri?這個變量,是不是已經(jīng)見過很多次了。而且這些變量基本上和 Apache 是對應(yīng)的。

默認(rèn)提供的變量非常多,在這里我也只是將官網(wǎng)的 HTTP 核心模塊中提供的這些變量先列出來,然后盡已所能的借助工具翻譯一下。最常用的那些大家至少要知道是什么意思,而不常用的那些也可以隨時過來查閱。大部分自己使用?return?指令打印一下返回的結(jié)果看下效果就好了,特殊的我會單獨(dú)寫出來并加粗字體或者直接放上測試效果代碼。

  • $arg_[name]?請求行中的 name 參數(shù),注意這個 name 是可變的,指的就是 GET 參數(shù)。

//?nginx.conf
location?/params1/?{
?return?200?$arg_a;
}

//?linux
[root@localhost?~]#?curl?http://localhost/params1/?a=111
111

看出來效果了吧,直接可以獲得我們的 GET 參數(shù)中的某一個具體的參數(shù)。如果要獲取全部的參數(shù),就要使用下面的變量。

  • $args?請求行中參數(shù)字符串。

//?nginx.conf
location?/params2/?{
?return?200?$args;
}

//?linux
[root@localhost?~]#?curl?"http://localhost/params2/?a=111&b=222"
a=111&b=222
  • $binary_remote_addr?客戶端IP地址的二進(jìn)制形式,值的長度總是4字節(jié)的 IPv4 或者16字節(jié)的 IPv6 地址。

  • $body_bytes_sent?Nginx 返回給客戶端的字節(jié)數(shù),不含響應(yīng)頭。

  • $bytes_sent?nginx返回給客戶端的字節(jié)數(shù)。

  • $connection?連接的序列號。這個連接是 Nginx 自己計數(shù)的,比如剛開機(jī)或者完全重啟 Nginx 就會從 1 開始,然后快速訪問重用 TCP 連接時也不會增加,大家可以自己試下哦。

  • $connection_requests?當(dāng)前通過連接發(fā)出的請求數(shù)。啥意思呢?也是和連接有關(guān)的,指的是當(dāng)前這個 TCP 連接下的請求數(shù),如果是新開的一個 TCP 連接,就會歸零從1開始。用 CURL 和瀏覽器分別測試就很明顯。瀏覽器請求一次后等一會再試也可以看到效果,和之前我們講過的連接及長連接的內(nèi)容吻合。

  • $connection_time?連接時間(以秒為單位,分辨率為毫秒)。當(dāng)前建立的 TCP 連接的持續(xù)連接時間。同樣的,新開 TCP 連接之后歸零,和上面的測試方式類似。

  • $content_length?“Content-Length” 請求頭的值。

  • $content_type?“Content-Type” 請求頭的值。

  • $cookie_[name]?和第一個?$arg_[name]?一樣的,這里是獲取指定的 Cookie 的值。

  • $document_root?當(dāng)前請求的 root 或者 alias 指令確定的目錄路徑。如果是相對路徑,比如?root html?那個,返回的也是完整的絕對路徑。

  • $document_uri?和?$uri?是一樣的,之前我們就用過了,一會去那邊看。

  • $host?“Host” 請求頭的值,如果沒有該請求頭,則為與請求對應(yīng)的虛擬主機(jī)的首要主機(jī)名。

  • $hostname?機(jī)器名稱。

  • $http_[name]?任意請求頭的值;變量名的后半部為轉(zhuǎn)化為小寫并且用下劃線替代橫線后的請求頭名稱。還是和?$arg_[name]?一樣,只不過這回是請求頭中指定的字段值。

  • $https?如果連接是SSL模塊,返回 on ,否則返回空字符串。

  • $is_args?如果請求行帶有參數(shù),返回 “?” ,否則返回空字符串。也就是說,有 GET 參數(shù)的話,這個變量的值就是個問號,如果沒有 GET 參數(shù)的話,它就是空的。

  • $limit_rate?允許設(shè)置此值來限制連接的傳輸速率。之前在學(xué)習(xí)限流相關(guān)內(nèi)容的時候我們已經(jīng)了解過啦。

  • $msec?當(dāng)前時間戳,單位是秒,精度是毫秒。(1.3.9, 1.2.6)

  • $nginx_version?Nginx 的版本號。

  • $pid?worker進(jìn)程的PID,如果你當(dāng)前只有一個 worker 進(jìn)程,那么可以修改下 worker_process 多設(shè)置幾個就能看出效果了。

  • $pipe?如果當(dāng)前請求使用?pipeline?了,就會設(shè)置為 p ,否則的話就是 . 。這個 pipeline 也是 HTTP1.1 的一個特性,我也只是知道皮毛,這里就不多解釋了,大家可以自己查閱下相關(guān)的資料。

  • $proxy_protocol_addr?通過代理協(xié)議獲取真實(shí)地址。這個和 HAProxy 這種四層代理服務(wù)器有關(guān),不在我們的討論范圍內(nèi)。簡單來說,就是四層負(fù)載轉(zhuǎn)發(fā)過來的請求,要拿到真實(shí) IP 比較麻煩,不像 Nginx 做反向代理時可以直接設(shè)置頭。但如果使用 HAProxy 拋出的 Proxy Protocol 的話,就會簡單很多。這一塊的內(nèi)容我記下了,如果將來要學(xué)習(xí) HAProxy 相關(guān)的內(nèi)容的話,那么會再進(jìn)行更詳細(xì)的測試與解讀。

  • $proxy_protocol_port?和上面的一樣,不過是獲取端口號。

  • $proxy_protocol_server_addr?通過代理協(xié)議獲取服務(wù)器地址。

  • $proxy_protocol_server_port?通過代理協(xié)議,獲取服務(wù)器端口號。

  • $query_string?和?$args?一樣。

  • $realpath_root?按 root 或者 alias 配置算出的當(dāng)前請求的絕對路徑,如果有軟連接的文件也會解析成真實(shí)的文件路徑。這個比較常用,我這里就是默認(rèn)的 /usr/local/nginx/html 這個目錄。

  • $remote_addr?客戶端的 IP 地址。非常重要的,做反向代理的時候轉(zhuǎn)發(fā)真實(shí) IP 地址就靠它了。

  • $remote_port?客戶端的端口號。注意,是客戶端的,不是我們在 Nginx 用 listen 監(jiān)聽的。

  • $remote_user?為基本用戶認(rèn)證提供的用戶名。這個直接請求加個 Authorization 請求頭就可以測試出來,之前我們學(xué)習(xí)過?PHP的HTTP驗(yàn)證https://mp.weixin.qq.com/s/H8I1MSeqsuOn16lKXZ4Nrw?,其實(shí),HTTP相關(guān)的驗(yàn)證直接在 Nginx 配就可以,后面我們也會學(xué)習(xí)到。

  • $request?完整的原始請求行。HTTP 請求中的第一行哦。

  • $request_body?請求正文。只有通過 proxy_pass 或者 fastcgi_pass 相關(guān)配置路徑的路徑中,這個變量里面才有值。最常見的一個需求,將 POST 請求的參數(shù)也放到 access 日志中,就需要使用這個變量。注意,只有動態(tài)頁面才可以使用,因此才必須是需要 proxy_pass 或者 FastCGI 這些的路徑。

  • $request_body_file?請求正文的臨時文件名。處理完成時,臨時文件被刪除。這個和我們之前講過的 client_body_in_file_only 參數(shù)有關(guān)。如果在被代理的請求或者 FastCGI 中傳遞臨時文件名,就應(yīng)該禁止傳遞請求正文。使用 proxy_pass_request_body off 配置和 fastcgi_pass_request_body off 配置來禁止傳遞普通的請求正文。

  • $request_completion?請求完成時返回 ok ,否則返回空字符串。沒測試出效果,有了解的小伙伴可以留言哦。

  • $request_filename?比較有用的一個變量,根據(jù) root 或者 alias 配置的路徑,以及請求的 URI ,得到當(dāng)前請求的完全文件路徑。

  • $request_id?生成一個 16 字節(jié)的唯一哈希 ID ,在 1.11.0 版本之后才有的。

  • $request_length?請求的長度,包括請求行、請求頭以及請求體的長度。

  • $request_method?請求方法,就是 POST 、GET 那些啦,比較有用的。

  • $request_time?請求處理的時間,單位為秒,精度是毫秒(1.3.9, 1.2.6),請求處理時間從由客戶端接收到第一個字節(jié)開始計算。

  • $request_uri?返回原始的請求行(帶 GET 參數(shù)的),注意它和?$uri?以及?$document_uri?的區(qū)別。

  • $scheme?請求協(xié)議的類型,比如 http 或 https 。

  • $sent_http_[name]?響應(yīng)頭的信息,這個 name 可以替換成響應(yīng)頭的名稱,比如說?$sent_http_connection?就是響應(yīng)頭里面的 Connection 內(nèi)容。

  • $sent_trailer_[name]?響應(yīng)結(jié)束時發(fā)送的任意字段(1.13.2),變量名的后半部分 name 可以替換成任意響應(yīng)頭的名稱。這個不太好測,需要使用日志,我們可以先在 http 模塊中定義一個自定義日志?log_format vvv op_trailer=$sent_trailer_op;?這一塊的內(nèi)容我們后面才會學(xué)到。然后在 location 中添加?add_trailer op 111;?以及?access_log logs/params2.log vvv;?。接著訪問鏈接之后,就可以在 /usr/local/nginx/logs 下面的 params2.log 日志文件中看到我們設(shè)置的內(nèi)容。

  • $server_addr?接受請求的服務(wù)器地址。為計算這個值,通常需要進(jìn)行一次系統(tǒng)調(diào)用。為了避免系統(tǒng)調(diào)用,必須指定listen 指令的地址,并且使用 bind 參數(shù)。我這里啥都沒配,就是顯示當(dāng)前服務(wù)器的 IP 地址。

  • $server_name?接受請求的虛擬主機(jī)的首要主機(jī)名。server_name 配置指令的第一個主機(jī)名。

  • $server_port?接受請求的虛擬主機(jī)的端口。

  • $server_protocol?請求協(xié)議,通常為“HTTP/1.0”或“HTTP/1.1”。

  • $status?返回響應(yīng)的狀態(tài)碼。

  • $tcpinfo_rtt, $tcpinfo_rttvar, $tcpinfo_snd_cwnd, $tcpinfo_rcv_space?客戶端TCP連接的信息,在支持套接字選項(xiàng)TCP_INFO的系統(tǒng)中可用。

  • $time_iso8601?ISO 8601 標(biāo)準(zhǔn)的服務(wù)器當(dāng)前時間,我這里的結(jié)果是 2022-08-14T22:43:00-04:00 。

  • $time_local?日志中的時間記錄變量,格式是 14/Aug/2022:22:43:00 -0400 。

  • $uri?非常常用的,返回完整的 URI ,不包含 GET 參數(shù)。它值可能隨請求的處理過程而改變。 比如,當(dāng)進(jìn)行內(nèi)部跳轉(zhuǎn)時,或者使用默認(rèn)頁文件。

總結(jié)

哈哈哈哈,是不是好簡單啊,水了一篇文章。不過雖說內(nèi)容少,但咱們可是一個一個真實(shí)地測了一下效果的,真不是從哪里復(fù)制粘貼來就完事了。

好了,這回真的要和 HTTP 核心模塊道別了,我們即將進(jìn)入 HTTP 擴(kuò)展模塊的學(xué)習(xí)了。說是擴(kuò)展,但是其實(shí)也都是隨安裝包一起發(fā)布的,只需要在編譯安裝時的?configure?添加相應(yīng)的模塊即可,這一類的教程太多了,熟悉 Linux 安裝軟件的同學(xué)也都不會有問題。另外也有一部分模塊本身就包含在核心源碼中,只是區(qū)分出了不同的模塊分類。因此,咱們還是以配置指令的介紹學(xué)習(xí)為主,商業(yè)版部分的模塊也不在我們的學(xué)習(xí)范圍內(nèi)。

參考文檔:

http://nginx.org/en/docs/http/ngx_http_core_module.html文章來源地址http://www.zghlxwxcb.cn/news/detail-634389.html

到了這里,關(guān)于【Nginx15】Nginx學(xué)習(xí):HTTP核心模塊(十二)內(nèi)嵌變量的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 【Nginx09】Nginx學(xué)習(xí):HTTP核心模塊(六)請求頭處理

    對于一個 HTTP 應(yīng)用來說,最重要的其實(shí)就是 HTTP 的兩個核心功能,一個是請求,一個就是響應(yīng)。而對于一個 Web 應(yīng)用服務(wù)器來說,響應(yīng)通常是靜態(tài)文件或者是動態(tài)程序代碼來完成,圍繞響應(yīng)的配置指令大部分以緩存優(yōu)化為主。從這里也能看出,在 Nginx 這種應(yīng)用服務(wù)中,請求相

    2024年02月17日
    瀏覽(16)
  • 【Nginx08】Nginx學(xué)習(xí):HTTP核心模塊(五)長連接與連接處理

    HTTP 基礎(chǔ)知識大家掌握的怎么樣呀?對于長連接這一塊的內(nèi)容應(yīng)該也不是什么新鮮東西了吧。畢竟 HTTP1.1 都已經(jīng)發(fā)布這么久了。今天主要來看的就是長連接相關(guān)的配置,另外還會介紹幾個和連接有關(guān)的內(nèi)容。同時,今天的內(nèi)容除了 HTTP 外,還需要一點(diǎn) TCP 的知識。沒辦法,畢竟

    2024年02月16日
    瀏覽(15)
  • 【Nginx13】Nginx學(xué)習(xí):HTTP核心模塊(十)Types、AIO及其它配置

    【Nginx13】Nginx學(xué)習(xí):HTTP核心模塊(十)Types、AIO及其它配置

    今天學(xué)習(xí)的內(nèi)容也比較簡單,主要的是 Types 相關(guān)的配置,另外還會了解一下 AIO 以及部分沒有特別大的分類歸屬的配置指令的使用。后面的內(nèi)容都是 HTTP 核心模塊中比較小或者比較簡單的部分了。有很多配置項(xiàng)其實(shí)我們平常并不常用,甚至很多在學(xué)習(xí)之前我都不知道有它們的

    2024年02月12日
    瀏覽(27)
  • 【Nginx12】Nginx學(xué)習(xí):HTTP核心模塊(九)瀏覽器緩存與try_files

    【Nginx12】Nginx學(xué)習(xí):HTTP核心模塊(九)瀏覽器緩存與try_files

    瀏覽器緩存在 Nginx 的 HTTP 核心模塊中其實(shí)只有兩個簡單的配置,這一塊也是 HTTP 的基礎(chǔ)知識。之前我們就一直在強(qiáng)調(diào),學(xué)習(xí) Nginx 需要的就是各種網(wǎng)絡(luò)相關(guān)的基礎(chǔ)知識,其中更重要的就是 HTTP 和 TCP 相關(guān)的內(nèi)容。另外一個 try_files 配置指令也是 Nginx 中非常常用的一個指令,用于

    2024年02月15日
    瀏覽(23)
  • nginx腳本,Nginx變量截取字符串,拼接字符串,nginx打印日志,添加修改HTTP請求頭,添加修改HTTP響應(yīng)頭

    nginx腳本,Nginx變量截取字符串,拼接字符串,nginx打印日志,添加修改HTTP請求頭,添加修改HTTP響應(yīng)頭

    nginx變量命名,以$開頭。 打印日志的目的,是想知道某個變量的值是多少,通過add_header設(shè)置響應(yīng)頭,間接地打印日志。 通過設(shè)置響應(yīng)頭,然后在瀏覽器上請求nginx地址,然后得到的響應(yīng)頭,就知道變量值是多少了。 這個需要注意一下,特別是正則 ~ ? ,后面截取字符串需要

    2024年02月12日
    瀏覽(103)
  • nginx http模塊

    nginx http模塊

    location的定義包含以下幾種 =:表示精確匹配,只有請求的url路徑與后面的字符串完全相等時,才會命中,不支持location嵌套 ~:表示使用正則定義的,區(qū)分大小寫 ~*:表示是使用正則定義的,不區(qū)分大小寫 ^~:表示該符號后面的字符是最佳匹配,采用該規(guī)則,不再進(jìn)行后續(xù)的查

    2023年04月08日
    瀏覽(12)
  • Nginx安裝http2和ssl模塊

    Nginx安裝http2和ssl模塊

    Nginx在執(zhí)行默認(rèn)安裝命令的時候,并不會編譯啟用ngx_http_v2_module模塊。故在修改Nginx配置文件啟用http2.0協(xié)議的時候會報錯。 一.檢查Nginx安裝了哪些模塊 如圖就是沒有安裝ngx_http_v2_module模塊 二.重新編譯Nginx Nginx有兩個目錄,一個是安裝目錄,一個是源碼目錄,安裝目錄就是執(zhí)

    2024年01月16日
    瀏覽(20)
  • Nginx ngx_http_auth_request_module模塊鑒權(quán)

    Nginx ngx_http_auth_request_module模塊鑒權(quán)

    ngx_http_auth_request_module 模塊 實(shí)現(xiàn)了基于一子請求的結(jié)果的客戶端的授權(quán)。如果子請求返回2xx響應(yīng)碼,則允許訪問。如果它返回401或403,則訪問被拒絕并顯示相應(yīng)的錯誤代碼。子請求返回的任何其他響應(yīng)代碼都被認(rèn)為是錯誤的。 auth_request 使用的也是 subrequest 進(jìn)行子請求。 當(dāng)我

    2024年02月17日
    瀏覽(20)
  • 【Nginx20】Nginx學(xué)習(xí):FastCGI模塊(二)緩存配置

    通過上篇文章的學(xué)習(xí),普通的 PHP 與 Nginx 的連接就已經(jīng)沒啥大問題了。一般的網(wǎng)站直接那套配置就夠了,這也是 Nginx 非常友好的一面。很多在默認(rèn)的配置文件中注釋掉的內(nèi)容,只要打開就是可以直接使用的。不過,F(xiàn)astCGI 可不是一個小模塊,還有很多的配置指令,要想深入,

    2024年02月11日
    瀏覽(22)
  • 【Nginx22】Nginx學(xué)習(xí):FastCGI模塊(四)錯誤處理及其它

    FastCGI 最后一篇,我們將學(xué)習(xí)完剩下的所有配置指令。在這里,錯誤處理還是單獨(dú)拿出來成為一個小節(jié)了,而剩下的內(nèi)容都放到其它中進(jìn)行學(xué)習(xí)。不要感覺是其它的就沒用了,有些配置指令還是非常重要的哦,或許正好你現(xiàn)在的項(xiàng)目就能用上呢。 今天學(xué)習(xí)的內(nèi)容都是可以設(shè)置

    2024年02月10日
    瀏覽(23)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包