ngx.var 是獲取 Nginx 的變量,需要經歷字符串 hash、hash 表查找等過程。
ngx.ctx 僅僅是一個 Lua table 而已,它的引用存放在 ngx_lua 的模塊上下文(ctx_ref)。
使用 ngx.ctx 比 ngx.var 往往是更好的選擇。
https://moonbingbing.gitbooks.io/openresty-best-practices/content/openresty/inline_var.html
ngx.var的api
名稱 | 說明 |
---|---|
$arg_name | 請求中的name參數 |
$args | 請求中的參數 |
$binary_remote_addr | 遠程地址的二進制表示 |
$body_bytes_sent | 已發送的消息體字節數 |
$content_length | HTTP請求信息里的"Content-Length" |
$content_type | 請求信息里的"Content-Type" |
$document_root | 針對當前請求的根路徑設置值 |
$document_uri | 與$uri相同; 比如 /test2/test.php |
$host | 請求信息中的"Host",如果請求中沒有Host行,則等於設置的服務器名 |
$hostname | 機器名使用 gethostname系統調用的值 |
$http_cookie | cookie 信息 |
$http_referer | 引用地址 |
$http_user_agent | 客戶端代理信息 |
$http_via | 最后一個訪問服務器的Ip地址。 |
$http_x_forwarded_for | 相當於網絡訪問路徑 |
$is_args | 如果請求行帶有參數,返回“?”,否則返回空字符串 |
$limit_rate | 對連接速率的限制 |
$nginx_version | 當前運行的nginx版本號 |
$pid | worker進程的PID |
$query_string | 與$args相同 |
$realpath_root | 按root指令或alias指令算出的當前請求的絕對路徑。其中的符號鏈接都會解析成真是文件路徑 |
$remote_addr | 客戶端IP地址 |
$remote_port | 客戶端端口號 |
$remote_user | 客戶端用戶名,認證用 |
$request | 用戶請求 |
$request_body | 這個變量(0.7.58+)包含請求的主要信息。在使用proxy_pass或fastcgi_pass指令的location中比較有意義 |
$request_body_file | 客戶端請求主體信息的臨時文件名 |
$request_completion | 如果請求成功,設為"OK";如果請求未完成或者不是一系列請求中最后一部分則設為空 |
$request_filename | 當前請求的文件路徑名,比如/opt/nginx/www/test.php |
$request_method | 請求的方法,比如"GET"、"POST"等 |
$request_uri | 請求的URI,帶參數 |
$scheme | 所用的協議,比如http或者是https |
$server_addr | 服務器地址,如果沒有用listen指明服務器地址,使用這個變量將發起一次系統調用以取得地址(造成資源浪費) |
$server_name | 請求到達的服務器名 |
$server_port | 請求到達的服務器端口號 |
$server_protocol | 請求的協議版本,"HTTP/1.0"或"HTTP/1.1" |
$uri | 請求的URI,可能和最初的值有不同,比如經過重定向之類的 |
===========
ngx.var.request_uri : 是請求的url 去除 https://ip:port 的剩余部分,包含 url傳遞的 參數。
ngx.var.uri : 是請求的url 去除 https://ip:port 、去除 ? 問號 后面帶的參數【包括逗號】,剩余的就是一些 類似 /xxx/xxx/xxx 格式的 uri 。
============
https://www.cnblogs.com/wangxusummer/p/4309007.html
ngx.req 的 api