日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > Nginx >内容正文

Nginx

Nginx 内置绑定变量的介绍

發(fā)布時(shí)間:2024/4/15 Nginx 47 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Nginx 内置绑定变量的介绍 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

使用 Nginx 內(nèi)置綁定變量

Nginx作為一個(gè)成熟、久經(jīng)考驗(yàn)的負(fù)載均衡軟件,與其提供豐富、完整的內(nèi)置變量是分不開的,它極大增加了對(duì)Nginx網(wǎng)絡(luò)行為的控制細(xì)度。這些變量大部分都是在請(qǐng)求進(jìn)入時(shí)解析的,并把他們緩存到請(qǐng)求cycle中,方便下一次獲取使用。首先來看看Nginx對(duì)都開放了那些API。

參看下表:

名稱說明
$arg_name請(qǐng)求中的name參數(shù)
$args請(qǐng)求中的參數(shù)
$binary_remote_addr遠(yuǎn)程地址的二進(jìn)制表示
$body_bytes_sent已發(fā)送的消息體字節(jié)數(shù)
$content_lengthHTTP請(qǐng)求信息里的"Content-Length"
$content_type請(qǐng)求信息里的"Content-Type"
$document_root針對(duì)當(dāng)前請(qǐng)求的根路徑設(shè)置值
$document_uri與$uri相同; 比如 /test2/test.php
$host請(qǐng)求信息中的"Host",如果請(qǐng)求中沒有Host行,則等于設(shè)置的服務(wù)器名
$hostname機(jī)器名使用 gethostname系統(tǒng)調(diào)用的值
$http_cookiecookie 信息
$http_referer引用地址
$http_user_agent客戶端代理信息
$http_via最后一個(gè)訪問服務(wù)器的Ip地址。
$http_x_forwarded_for相當(dāng)于網(wǎng)絡(luò)訪問路徑
$is_args如果請(qǐng)求行帶有參數(shù),返回“?”,否則返回空字符串
$limit_rate對(duì)連接速率的限制
$nginx_version當(dāng)前運(yùn)行的nginx版本號(hào)
$pidworker進(jìn)程的PID
$query_string與$args相同
$realpath_root按root指令或alias指令算出的當(dāng)前請(qǐng)求的絕對(duì)路徑。其中的符號(hào)鏈接都會(huì)解析成真是文件路徑
$remote_addr客戶端IP地址
$remote_port客戶端端口號(hào)
$remote_user客戶端用戶名,認(rèn)證用
$request用戶請(qǐng)求
$request_body這個(gè)變量(0.7.58+)包含請(qǐng)求的主要信息。在使用proxy_pass或fastcgi_pass指令的location中比較有意義
$request_body_file客戶端請(qǐng)求主體信息的臨時(shí)文件名
$request_completion如果請(qǐng)求成功,設(shè)為"OK";如果請(qǐng)求未完成或者不是一系列請(qǐng)求中最后一部分則設(shè)為空
$request_filename當(dāng)前請(qǐng)求的文件路徑名,比如/opt/nginx/www/test.php
$request_method請(qǐng)求的方法,比如"GET"、"POST"等
$request_uri請(qǐng)求的URI,帶參數(shù)
$scheme所用的協(xié)議,比如http或者是https
$server_addr服務(wù)器地址,如果沒有用listen指明服務(wù)器地址,使用這個(gè)變量將發(fā)起一次系統(tǒng)調(diào)用以取得地址(造成資源浪費(fèi))
$server_name請(qǐng)求到達(dá)的服務(wù)器名
$server_port請(qǐng)求到達(dá)的服務(wù)器端口號(hào)
$server_protocol請(qǐng)求的協(xié)議版本,"HTTP/1.0"或"HTTP/1.1"
$uri請(qǐng)求的URI,可能和最初的值有不同,比如經(jīng)過重定向之類的

其實(shí)這還不是全部,Nginx在不停迭代更新是一個(gè)原因,還有一個(gè)是有些變量太冷門,借助它們,會(huì)有很多玩法。

首先,在OpenResty中如何引用這些變量呢?參考?ngx.var.VARIABLE?小節(jié)。

利用這些內(nèi)置變量,來做一個(gè)簡單的數(shù)學(xué)求和運(yùn)算例子:

server {listen 80;server_name localhost;location /sum {#處理業(yè)務(wù)content_by_lua_block {local a = tonumber(ngx.var.arg_a) or 0local b = tonumber(ngx.var.arg_b) or 0ngx.say("sum: ", a + b )}}}

驗(yàn)證一下:

? ~ curl 'http://127.0.0.1/sum?a=11&b=12' sum: 23

也許你笑了,這個(gè)API太簡單沒有實(shí)際意義。我們做個(gè)簡易防火墻,看看如何開始玩耍。

參看下面示例代碼:

server {listen 80;server_name localhost;location /sum {# 使用access階段完成準(zhǔn)入階段處理access_by_lua_block {local black_ips = {["127.0.0.1"]=true}local ip = ngx.var.remote_addrif true == black_ips[ip] thenngx.exit(ngx.HTTP_FORBIDDEN)end};#處理業(yè)務(wù)content_by_lua_block {local a = tonumber(ngx.var.arg_a) or 0local b = tonumber(ngx.var.arg_b) or 0ngx.say("sum:", a + b )}}}

運(yùn)行測(cè)試:

? ~ curl '192.168.1.104/sum?a=11&b=12' sum:23 ? ~ ? ~ ? ~ curl '127.0.0.1/sum?a=11&b=12' <html> <head><title>403 Forbidden</title></head> <body bgcolor="white"> <center><h1>403 Forbidden</h1></center> <hr><center>openresty/1.9.3.1</center> </body> </html>

通過測(cè)試結(jié)果看到,提取了終端的IP地址后進(jìn)行限制。擴(kuò)充一下,就可以支持 IP 地址段,如果再與系統(tǒng)iptables進(jìn)行配合,那么就足以達(dá)到軟防火墻的目的。

目前為止,所有的例子都是對(duì)Nginx內(nèi)置變量的獲取,是否可以對(duì)其進(jìn)行設(shè)置呢?其實(shí)大多數(shù)內(nèi)容都是不允許寫入的,例如剛剛的終端IP地址,在請(qǐng)求中是不允許對(duì)其進(jìn)行更新的。對(duì)于可寫的變量中的limit_rate,值得一提,它能完成傳輸速率限制,并且它的影響是單個(gè)請(qǐng)求級(jí)別。

參看下面示例:

location /download {access_by_lua_block {ngx.var.limit_rate = 1000};}

下載測(cè)試:

? ~ wget '127.0.0.1/download/1.cab' --2015-09-13 13:59:51-- http://127.0.0.1/download/1.cab Connecting to 127.0.0.1... connected. HTTP request sent, awaiting response... 200 OK Length: 135802 (133K) [application/octet-stream] Saving to: '1.cab'1.cab 6%[===> ] 8.00K 1.01KB/s eta 1m 53s

總結(jié)

以上是生活随笔為你收集整理的Nginx 内置绑定变量的介绍的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。