天天看點

nginx如何使用預編譯變量

nginx中有一些預編譯參數,比如随便例舉幾個如下:

$server_addr        1.0.8        伺服器位址,如果沒有用listen指明伺服器位址,使用這個變量将發起一次系統調用以取得位址(造成資源浪費);

$server_name        1.0.8        請求到達的伺服器名;

$server_port        1.0.8        請求到達的伺服器端口号;

$server_protocol        1.0.8        請求的協定版本,"HTTP/1.0"或"HTTP/1.1";

$uri        1.0.8        請求的URI,可能和最初的值有不同,比如經過重定向之類的。

對于這些參數,如果配置檔案想用,那就非常簡單,直接加上$使用即可,如: $server_addr

而如果在nginx内部二次開發的http子產品想使用的話,使用如下三種函數:

直接引用變量有3個API可以調用:

他們的差別是這樣子的,ngx_http_get_indexed_variable和ngx_http_get_flushed_variable都是用來取得有索引的變量,不過他們的差別是後一個會處理 NGX_HTTP_VAR_NOCACHEABLE這個标記,也就是說如果你想要cache你的變量值,那麼你的變量屬性就不能設定NGX_HTTP_VAR_NOCACHEABLE,并且通過ngx_http_get_flushed_variable來擷取變量值.而ngx_http_get_variable和上面的差別就是它能夠得到沒有索引的變量值.

通過上面我們知道可以通過索引來得到變量值,可是這個索引改如何取得呢,Nginx也提供了對應的接口:

通過這個接口,就可以取得對應變量名的索引值。

本文轉自 zhegaozhouji 51CTO部落格,原文連結:http://blog.51cto.com/1038741/1736103

繼續閱讀