最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

nginx變量的使用詳解

 更新時(shí)間:2025年07月03日 08:47:10   作者:_c G  
這篇文章主要介紹了nginx變量的使用,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

nginx 變量

Nginx 同 Apache 等其他 Web 服務(wù)器的配置記法不太相同,Nginx的配置文件使用語(yǔ)法的就是一門(mén)微型的編程語(yǔ)言??梢灶愃茖?xiě)程序一般編寫(xiě)配置文件,可操作性很大。既然是編程語(yǔ)言,一般也就少不了“變量”這種概念。

1、nginx變量簡(jiǎn)介

  • 所有的 Nginx變量在 Nginx 配置文件中引用時(shí)都須帶上 $ 前綴
  • 在 Nginx 配置中,變量只能存放一種類型的值,有且也只存在一種類型,那就是字符串類型

nginx可以使用變量簡(jiǎn)化配置與提高配置的靈活性,所有的變量值都可以通過(guò)這種方式引用:

$變量名

2、nginx 變量的定義和使用

nginx中的變量分為兩種,自定義變量與內(nèi)置預(yù)定義變量

1、自定義變量

1、聲明變量

可以在sever,http,location等標(biāo)簽中使用set命令(非唯一)聲明變量,語(yǔ)法如下

set $變量名 變量值

注意:

2、變量的可見(jiàn)性

在不同層級(jí)的標(biāo)簽中聲明的變量性的可見(jiàn)性規(guī)則如下:

nginx安裝echo模塊

查看已經(jīng)安裝的nginx的版本
[root@192 ~]# nginx -V 
下載echo模塊的安裝包
[root@192 ~]# wget https://github.com/openresty/echo-nginx-module/archive/v0.61.tar.gz
[root@192 ~]# ls
anaconda-ks.cfg  nginx-1.16.0.tar.gz  v0.61.tar.gz
解壓到相同路徑下:
[root@192 ~]# tar xzf nginx-1.16.0.tar.gz -C /usr/local/
[root@192 ~]# tar xzf v0.61.tar.gz -C /usr/local/
安裝編譯工具
[root@192 ~]# cd /usr/local/
[root@192 local]# yum -y install pcre pcre-devel openssl openssl-devel gcc gcc-c++   zlib zlib-devel
添加模塊:
[root@192 local]# cd nginx-1.16.0/
添加上原來(lái)已經(jīng)有的參數(shù)和新添加的模塊:
[root@192 nginx-1.16.0]# ./configure --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx --modules-path=/usr/lib64/nginx/modules --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock --http-client-body-temp-path=/var/cache/nginx/client_temp --http-proxy-temp-path=/var/cache/nginx/proxy_temp --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp --http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp --http-scgi-temp-path=/var/cache/nginx/scgi_temp --user=nginx --group=nginx --with-compat --with-file-aio --with-threads --with-http_addition_module --with-http_auth_request_module --with-http_dav_module --with-http_flv_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_mp4_module --with-http_random_index_module --with-http_realip_module --with-http_secure_link_module --with-http_slice_module --with-http_ssl_module --with-http_stub_status_module --with-http_sub_module --with-http_v2_module --with-mail --with-mail_ssl_module --with-stream --with-stream_realip_module --with-stream_ssl_module --with-stream_ssl_preread_module --with-cc-opt='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic -fPIC' --with-ld-opt='-Wl,-z,relro -Wl,-z,now -pie' --add-module=/usr/local/echo-nginx-module-0.61
[root@192 nginx-1.16.0]# make   #編譯,不要make install 否則會(huì)覆蓋原來(lái)的文件
[root@192 nginx-1.16.0]#  mv /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx_bak2 #將原來(lái)的nignx備份
[root@192 nginx-1.16.0]# cp objs/nginx /usr/local/nginx/sbin/  拷貝nignx
[root@192 nginx-1.16.0]# /usr/local/nginx/sbin/nginx  #啟動(dòng)
[root@192 nginx-1.16.0]# nginx -V  查看模塊是否添加成功
nginx version: nginx/1.16.0
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-36) (GCC) 
built with OpenSSL 1.0.2k-fips  26 Jan 2017
TLS SNI support enabled
configure arguments: --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx --modules-path=/usr/lib64/nginx/modules --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock --http-client-body-temp-path=/var/cache/nginx/client_temp --http-proxy-temp-path=/var/cache/nginx/proxy_temp --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp --http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp --http-scgi-temp-path=/var/cache/nginx/scgi_temp --user=nginx --group=nginx --with-compat --with-file-aio --with-threads --with-http_addition_module --with-http_auth_request_module --with-http_dav_module --with-http_flv_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_mp4_module --with-http_random_index_module --with-http_realip_module --with-http_secure_link_module --with-http_slice_module --with-http_ssl_module --with-http_stub_status_module --with-http_sub_module --with-http_v2_module --with-mail --with-mail_ssl_module --with-stream --with-stream_realip_module --with-stream_ssl_module --with-stream_ssl_preread_module --with-cc-opt='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic -fPIC' --with-ld-opt='-Wl,-z,relro -Wl,-z,now -pie' --add-module=/usr/local/echo-nginx-module-0.61

3、配置 $foo=hello

  • nginx 中的變量必須都以$開(kāi)頭
  • nginx 的配置文件中所有使用的變量都必須是聲明過(guò)的,否則 nginx 會(huì)無(wú)法啟動(dòng)并打印相關(guān)異常日志
  • location標(biāo)簽中聲明的變量中對(duì)這個(gè)location塊可見(jiàn)
  • server標(biāo)簽中聲明的變量對(duì)server塊以及server塊中的所有子塊可見(jiàn)
  • http標(biāo)簽中聲明的變量對(duì)http塊以及http塊中的所有子塊可見(jiàn)
[root@192 ~]# cd /etc/nginx/conf.d/
[root@192 conf.d]# vim echo.conf
server {
        listen 80;
        server_name     localhost;
        location /test {
                set $foo hello;
                echo "foo: $foo";
        }
}

輸出

[root@192 conf.d]# nginx -s reload
[root@192 conf.d]# curl localhost/test
foo: hello

5、 使用大括號(hào)插值

在“變量插值”的上下文中,還有一種特殊情況,即當(dāng)引用的變量名之后緊跟著變量名的構(gòu)成字符時(shí)(比如后跟字母、數(shù)字以及下劃線),我們就需要使用特別的記法來(lái)消除歧義,例如:

server {
        listen 80;
        server_name     localhost;
        location /test-brace {
                set $first "hello ";
                echo "${first}world";
        }
}

輸出

[root@192 conf.d]# nginx -s reload 
[root@192 conf.d]# curl localhost/test-brace
hello world

這里,我們?cè)?echo 配置指令的參數(shù)值中引用變量 first 的時(shí)候,后面緊跟著 world 這個(gè)單詞,所以如果直接寫(xiě)作 “firstworld” 則 Nginx “變量插值”計(jì)算引擎會(huì)將之識(shí)別為引用了變量 firstworld. 為了解決這個(gè)難題,Nginx 的字符串記法支持使用花括號(hào)在 之后把變量名圍起來(lái),比如這里的 ${first}。

6、變量作用域

set 指令不僅有賦值的功能,它還有創(chuàng)建 Nginx 變量的副作用,即當(dāng)作為賦值對(duì)象的變量尚不存在時(shí),它會(huì)自動(dòng)創(chuàng)建該變量。比如在上面這個(gè)例子中,如果 $a 這個(gè)變量尚未創(chuàng)建,則 set 指令會(huì)自動(dòng)創(chuàng)建 $a 這個(gè)用戶變量。如果我們不創(chuàng)建就直接使用它的值,則會(huì)報(bào)錯(cuò)。
例如

server {
    ...
    location /bad {
        echo $foo;
    }
}

此時(shí) Nginx 服務(wù)器會(huì)拒絕加載配置:

[root@192 conf.d]# nginx -s reload 
nginx: [emerg] unknown "foo" variable
nginx: configuration file /etc/nginx/nginx.conf test failed

Nginx 變量的創(chuàng)建和賦值操作發(fā)生在全然不同的時(shí)間階段,Nginx 變量的創(chuàng)建只能發(fā)生在 Nginx 配置加載的時(shí)候,或者說(shuō) Nginx 啟動(dòng)的時(shí)候,而賦值操作則只會(huì)發(fā)生在請(qǐng)求實(shí)際處理的時(shí)候。
這意味著不創(chuàng)建而直接使用變量會(huì)導(dǎo)致啟動(dòng)失敗,同時(shí)也意味著我們無(wú)法在請(qǐng)求處理時(shí)動(dòng)態(tài)地創(chuàng)建新的 Nginx 變量。

Nginx 變量一旦創(chuàng)建,其變量名的可見(jiàn)范圍就是整個(gè) Nginx 配置,甚至可以跨越不同虛擬主機(jī)的 server 配置塊。我們來(lái)看一個(gè)例子:

server {
        listen 80;
        server_name     localhost;
        location /foo {
                echo "foo = [$foo]";
        }
        location /bar {
                set $foo 32;
                echo "foo = [$foo]";
        }
}

輸出

[root@192 conf.d]# curl 'http://localhost/foo'
foo = []
[root@192 conf.d]# curl 'http://localhost/bar'
foo = [32]

這里我們?cè)?location /bar 中用 set 指令創(chuàng)建了變量 foo,于是在整個(gè)配置文件中這個(gè)變量都是可見(jiàn)的,因此我們可以在 location /foo 中直接引用這個(gè)變量而不用擔(dān)心 Nginx 會(huì)報(bào)錯(cuò)。

從這個(gè)例子我們可以看到,set 指令因?yàn)槭窃?location /bar 中使用的,所以賦值操作只會(huì)在訪問(wèn) /bar 的請(qǐng)求中執(zhí)行。而請(qǐng)求 /foo 接口時(shí),我們總是得到空的 foo值,因?yàn)橛脩糇兞课促x值就輸出的話,得到的便是空字符串。

從這個(gè)例子我們可以窺見(jiàn)的另一個(gè)重要特性是,Nginx 變量名的可見(jiàn)范圍雖然是整個(gè)配置,但每個(gè)請(qǐng)求都有所有變量的獨(dú)立副本,或者說(shuō)都有各變量用來(lái)存放值的容器的獨(dú)立副本,彼此互不干擾。比如前面我們請(qǐng)求了 /bar 接口后,foo 變量被賦予了值 32,但它絲毫不會(huì)影響后續(xù)對(duì) /foo 接口的請(qǐng)求所對(duì)應(yīng)的 foo 值(它仍然是空的?。?,因?yàn)楦鱾€(gè)請(qǐng)求都有自己獨(dú)立的 $foo 變量的副本。

2、內(nèi)置預(yù)定義變量

內(nèi)置預(yù)定義變量即無(wú)需聲明就可以使用的變量,通常包括一個(gè)http請(qǐng)求或響應(yīng)中一部分內(nèi)容的值,以下為一些常用的內(nèi)置預(yù)定義變量

變量名定義
$arg_PARAMETERGET請(qǐng)求中變量名PARAMETER參數(shù)的值。
$args這個(gè)變量等于GET請(qǐng)求中的參數(shù)。例如,foo=123&bar=blahblah;這個(gè)變量只可以被修改
$binary_remote_addr二進(jìn)制碼形式的客戶端地址。
$body_bytes_sent傳送頁(yè)面的字節(jié)數(shù)
$content_length請(qǐng)求頭中的Content-length字段。
$content_type請(qǐng)求頭中的Content-Type字段。
$cookie_COOKIEcookie COOKIE的值。
$document_root當(dāng)前請(qǐng)求在root指令中指定的值。
$document_uri與$uri相同。
$host請(qǐng)求中的主機(jī)頭(Host)字段,如果請(qǐng)求中的主機(jī)頭不可用或者空,則為處理請(qǐng)求的server名稱(處理請(qǐng)求的server的server_name指令的值)。值為小寫(xiě),不包含端口。
$hostname機(jī)器名使用 gethostname系統(tǒng)調(diào)用的值
$http_HEADERHTTP請(qǐng)求頭中的內(nèi)容,HEADER為HTTP請(qǐng)求中的內(nèi)容轉(zhuǎn)為小寫(xiě),-變?yōu)開(kāi)(破折號(hào)變?yōu)橄聞澗€),例如:$http_user_agent(Uaer-Agent的值);
$sent_http_HEADERHTTP響應(yīng)頭中的內(nèi)容,HEADER為HTTP響應(yīng)中的內(nèi)容轉(zhuǎn)為小寫(xiě),-變?yōu)開(kāi)(破折號(hào)變?yōu)橄聞澗€),例如: $sent_http_cache_control, $sent_http_content_type…;
$is_args如果$args設(shè)置,值為"?",否則為""。
$limit_rate這個(gè)變量可以限制連接速率。
$nginx_version當(dāng)前運(yùn)行的nginx版本號(hào)。
$query_string與$args相同。
$remote_addr客戶端的IP地址。
$remote_port客戶端的端口。
$remote_user已經(jīng)經(jīng)過(guò)Auth Basic Module驗(yàn)證的用戶名。
$request_filename當(dāng)前連接請(qǐng)求的文件路徑,由root或alias指令與URI請(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_method這個(gè)變量是客戶端請(qǐng)求的動(dòng)作,通常為GET或POST。包括0.8.20及之前的版本中,這個(gè)變量總為main request中的動(dòng)作,如果當(dāng)前請(qǐng)求是一個(gè)子請(qǐng)求,并不使用這個(gè)當(dāng)前請(qǐng)求的動(dòng)作。
$request_uri這個(gè)變量等于包含一些客戶端請(qǐng)求參數(shù)的原始URI,它無(wú)法修改,請(qǐng)查看$uri更改或重寫(xiě)URI。
$scheme所用的協(xié)議,比如http或者是https,比如rewrite ^(.+)$ $scheme://example.com$1 redirect;
$server_addr服務(wù)器地址,在完成一次系統(tǒng)調(diào)用后可以確定這個(gè)值,如果要繞開(kāi)系統(tǒng)調(diào)用,則必須在listen中指定地址并且使用bind參數(shù)。
$server_name服務(wù)器名稱。
$server_port請(qǐng)求到達(dá)服務(wù)器的端口號(hào)。
$server_protocol請(qǐng)求使用的協(xié)議,通常是HTTP/1.0或HTTP/1.1。
$uri請(qǐng)求中的當(dāng)前URI(不帶請(qǐng)求參數(shù),參數(shù)位于args,不同于瀏覽器傳遞的args),不同于瀏覽器傳遞的request_uri的值,它可以通過(guò)內(nèi)部重定向,或者使用index指令進(jìn)行修改。不包括協(xié)議和主機(jī)名,例如/foo/bar.html

Nginx 內(nèi)置變量最常見(jiàn)的用途就是獲取關(guān)于請(qǐng)求或響應(yīng)的各種信息。

1、uri vs request_uri

由 ngx_http_core 模塊提供的內(nèi)建變量 uri,可以用來(lái)獲取當(dāng)前請(qǐng)求的 URI(不含請(qǐng)求參數(shù)),而 request_uri 則用來(lái)獲取請(qǐng)求最原始的 URI(包含請(qǐng)求參數(shù))。

server {
        listen 80;
        server_name     localhost;
        location /test-uri {
                echo "uri = $uri";
                echo "request_uri = $request_uri";
        }
}

輸出

[root@localhost html]# nginx -s reload
[root@192 conf.d]# nginx -s reload 
[root@192 conf.d]# curl localhost/test-uri
uri = /test-uri
request_uri = /test-uri
[root@192 conf.d]# curl "localhost/test-uri?a=3&b=4"
uri = /test-uri
request_uri = /test-uri?a=3&b=4
[root@192 conf.d]# curl "localhost/test-uri/hello%20world?a=3&b=4"
uri = /test-uri/hello world
request_uri = /test-uri/hello%20world?a=3&b=4

2、$arg_XXX

另一個(gè)特別常用的內(nèi)建變量其實(shí)并不是單獨(dú)一個(gè)變量,而是有無(wú)限多變種的一群變量,即名字以 arg_ 開(kāi)頭的所有變量,我們估且稱之為 arg_XXX 變量群。

一個(gè)例子是 arg_name,這個(gè)變量的值是當(dāng)前請(qǐng)求中名為 name 的參數(shù)的值,而且還是未解碼的原始形式的值。

server {
        listen 80;
        server_name     localhost;
        location /test-arg {
        echo "name: $arg_name";
        echo "class: $arg_class";
        }
}

輸出

[root@192 conf.d]# nginx -s reload
[root@192 conf.d]# curl localhost/test-arg
name: 
class: 

[root@192 conf.d]# curl "localhost/test-arg?name=Tom&class=3"
name: Tom
class: 3

[root@192 conf.d]# curl "localhost/test-arg?name=hello%20world&class=9"
name: hello%20world
class: 9

3、$arg_XXX 不區(qū)分大小寫(xiě)

其實(shí) $arg_name 不僅可以匹配 name 參數(shù),也可以匹配 NAME 參數(shù),抑或是 Name,Nginx 會(huì)在匹配參數(shù)名之前,自動(dòng)把原始請(qǐng)求中的參數(shù)名調(diào)整為全部小寫(xiě)的形式。

[root@192 conf.d]# curl "localhost/test-arg?NAME=Marry"
name: Marry
class: 
[root@192 conf.d]# curl "localhost/test-arg?Name=Jimmy&class=DSfef"
name: Jimmy
class: DSfef

nginx 監(jiān)控

1、nginx的基礎(chǔ)監(jiān)控

  • 進(jìn)程監(jiān)控
  • 端口監(jiān)控

注意: 這兩個(gè)是必須要加在zabbix監(jiān)控,加觸發(fā)器有問(wèn)題及時(shí)告警。

web 服務(wù)器 nginx 以其高性能與抗并發(fā)能力越來(lái)越多的被用戶使用

nginx 提供了 ngx_http_stub_status_module,ngx_http_reqstat_module模塊,這個(gè)模塊提供了基本的監(jiān)控功能

2、監(jiān)控的主要指標(biāo)

我們需要對(duì)以下主要的指標(biāo)進(jìn)行監(jiān)控:

1、基本活躍指標(biāo)

Accepts(接受)、Handled(已處理)、Requests(請(qǐng)求數(shù))是一直在增加的計(jì)數(shù)器。Active(活躍)

名稱描述指標(biāo)類型
Accepts(接受)NGINX 所接受的客戶端連接數(shù)資源: 功能
Handled(已處理)成功的客戶端連接數(shù)資源: 功能
Dropped(已丟棄,計(jì)算得出)丟棄的連接數(shù)(接受 - 已處理)工作:錯(cuò)誤*
Requests(請(qǐng)求數(shù))客戶端請(qǐng)求數(shù)工作:吞吐量

2、每秒請(qǐng)求數(shù) – QPS

通過(guò)持續(xù)的 QPS 監(jiān)控,可以立刻發(fā)現(xiàn)是否被惡意攻擊或?qū)Ψ?wù)的可用性進(jìn)行評(píng)估。雖然當(dāng)問(wèn)題發(fā)生時(shí),通過(guò) QPS 不能定位到確切問(wèn)題的位置,但是他卻可以在第一時(shí)間提醒你環(huán)境可能出問(wèn)題了

3、服務(wù)器錯(cuò)誤率

通過(guò)監(jiān)控固定時(shí)間間隔內(nèi)的錯(cuò)誤代碼(4XX代碼表示客戶端錯(cuò)誤,5XX代碼表示服務(wù)器端錯(cuò)誤),可以了解到客戶端收到的結(jié)果是否是正確的錯(cuò)誤率突然的飆升很可能是你的網(wǎng)站漏洞發(fā)出的信號(hào)

如果你希望通過(guò) access log 分析錯(cuò)誤率,那么你需要配置 nginx 的日志模塊,讓 nginx 將響應(yīng)碼寫(xiě)入訪問(wèn)日志

3、指標(biāo)的收集

通過(guò)在編譯時(shí)加入 nginxngx_http_stub_status_module 模塊我們可以實(shí)時(shí)監(jiān)控以下基本的指標(biāo):

1、nginx Stub Status 監(jiān)控模塊安裝

先使用命令查看是否已經(jīng)安裝這個(gè)模塊:

# -V大寫(xiě)會(huì)顯示版本號(hào)和模塊等信息、v小寫(xiě)僅顯示版本信息
[root@localhost ~]# nginx -V

如果沒(méi)有此模塊,需要重新安裝,編譯命令如下:

./configure –with-http_stub_status_module

具體的使用方法是在執(zhí)行 ./configure 時(shí),指定 --with-http_stub_status_module,然后通過(guò)配置:

server {
        listen 80;
        server_name localhost;
        location /nginx-status {
                stub_status     on;
                access_log      on;
                }
}

2、nginx 狀態(tài)查看

配置完成后在瀏覽器中輸入http://10.0.105.207/nginx-status 查看

(或者用 curl localhost/nginx-status),顯示信息如下:

Active connections: 2 
server accepts handled requests
 26 26 48 
Reading: 0 Writing: 1 Waiting: 1 

3、Stub Status 參數(shù)說(shuō)明

正常情況下waiting數(shù)量是比較多的,并不能說(shuō)明性能差。如果reading+writing數(shù)量比較多說(shuō)明服務(wù)并發(fā)有問(wèn)題。

Active connections:2 #當(dāng)前nginx處理請(qǐng)求的數(shù)目(活躍的連接數(shù))

server accepts handled requests
26 26 48

nginx總共處理了26個(gè)連接,成功創(chuàng)建26次握手,也就是成功的連接數(shù)connection. 總共處理了48個(gè)請(qǐng)求

失敗連接=(總連接數(shù)-成功連接數(shù))(相等表示中間沒(méi)有失敗的),

5、Reqstat 模塊監(jiān)控 ----已經(jīng)不支持了(需要導(dǎo)入)

描述

  • ngx_http_reqstat_module 模塊
  • 這個(gè)模塊計(jì)算定義的變量,根據(jù)變量值分別統(tǒng)計(jì) nginx 的運(yùn)行狀況。
  • 可以監(jiān)視的運(yùn)行狀況有:連接數(shù)、請(qǐng)求數(shù)、各種響應(yīng)碼范圍的請(qǐng)求數(shù)、輸入輸出流量、rt、upstream訪問(wèn)等。
  • 可以指定獲取所有監(jiān)控結(jié)果或者一部分監(jiān)控結(jié)果。
  • 利用變量添加自定義監(jiān)控狀態(tài)??偟谋O(jiān)控狀態(tài)最大個(gè)數(shù)為50個(gè)。
  • 回收過(guò)期的監(jiān)控?cái)?shù)據(jù)。
  • 設(shè)置輸出格式
  • 跟蹤請(qǐng)求,不受內(nèi)部跳轉(zhuǎn)的影響
  • 不要使用與響應(yīng)相關(guān)的變量作為條件,比如"$status"

現(xiàn)在通過(guò)ngx_req_status_module能夠統(tǒng)計(jì)Nginx中請(qǐng)求的狀態(tài)信息。需要安裝第三方模塊

安裝模塊:

tengine官方說(shuō)req-status模塊默認(rèn)安裝。但是并沒(méi)有。從github引入第三方模塊解決該問(wèn)題
yum與編譯安裝的nginx擴(kuò)展模塊安裝:
[root@nginx-server ~]# yum install -y unzip
1. 安裝,先查看一下當(dāng)前編譯安裝nginx的版本
[root@localhost nginx-1.16.0]# nginx -V  
下載或者上傳一個(gè)和當(dāng)前的nginx版本一樣的nginx的tar包。
[root@nginx-server ~]# tar xzf nginx-1.16.0.tar.gz -C /usr/local/
2.下載ngx_req_status_module 模塊, 這是第三方模塊需要添加
[root@nginx-server ~]# wget https://github.com/zls0424/ngx_req_status/archive/master.zip -O ngx_req_status.zip
[root@nginx-server ~]# unzip ngx_req_status.zip
[root@nginx-server ~]# cp -r ngx_req_status-master/ /usr/local/ #與解壓的nginx在同一級(jí)目錄下
[root@nginx-server ~]# cd /usr/local/nginx-1.16.0/
[root@nginx-server nginx-1.16.0]# yum -y install pcre pcre-devel openssl openssl-devel gcc gcc-c++   zlib zlib-devel
[root@nginx-server nginx-1.16.0]# yum -y install patch.x86_64
[root@nginx-server nginx-1.16.0]# patch -p1 < ../ngx_req_status-master/write_filter-1.7.11.patch
[root@localhost nginx-1.16.0]# ./configure 添加上原來(lái)的參數(shù) --add-module=/usr/local/ngx_req_status-master
[root@localhost nginx-1.16.0]# make 
由于原先已有nginx,所以不能執(zhí)行make install,否則會(huì)覆蓋掉以前的配置文件及內(nèi)容
[root@localhost nginx-1.16.0]# mv /usr/sbin/nginx /usr/sbin/nginx_bak
[root@localhost nginx-1.16.0]# cp objs/nginx /usr/sbin/
[root@localhost nginx-1.16.0]# systemctl restart nginx 
[root@localhost nginx-1.16.0]# nginx -V   
如果發(fā)現(xiàn)編譯的配置文件有變化就成功了!
配置如下: 需要在http里面配置。
[root@localhost ~]# vim /etc/nginx/nginx.conf
req_status_zone server_name $server_name 256k;
req_status_zone server_addr $server_addr 256k;
req_status_zone server_url  $server_name$uri 256k;
req_status server_name server_addr server_url;
server {
        server_name localhost;
        location /req-status {
        req_status_show on;
        }
}

指令介紹
 req_status_zone
語(yǔ)法: req_status_zone name string size
默認(rèn)值: None
配置塊: http
定義請(qǐng)求狀態(tài)ZONE,請(qǐng)求按照string分組來(lái)排列,例如:
req_status_zone server_url  $server_name$uri 256k;
域名+uri將會(huì)形成一條數(shù)據(jù),可以看到所有url的帶寬,流量,訪問(wèn)數(shù)

req_status
語(yǔ)法: req_status zone1[ zone2]
默認(rèn)值: None
配置塊: http, server, location
在location中啟用請(qǐng)求狀態(tài),你可以指定更多zones。

req_status_show
語(yǔ)法: req_status_show on
默認(rèn)值: None
配置塊: location
在當(dāng)前位置啟用請(qǐng)求狀態(tài)處理程序

請(qǐng)求狀態(tài)信息包括以下字段:

  • zone_name - 利用req_status_zone定義的分組標(biāo)準(zhǔn)。例如,按照服務(wù)器名稱對(duì)請(qǐng)求進(jìn)行分組后;
  • key - 請(qǐng)求按分組標(biāo)準(zhǔn)分組后的分組標(biāo)識(shí)(即組名)。例如按服務(wù)器名稱分組時(shí),組名可能是localhost;
  • max_active - 該組的最大并發(fā)連接數(shù);
  • max_bw - 該組的最大帶寬;
  • traffic - 該組的總流量;
  • requests - 該組的總請(qǐng)求數(shù);
  • active - 該組當(dāng)前的并發(fā)連接數(shù);
  • bandwidth - 該組當(dāng)前帶寬。

6、補(bǔ)充(擴(kuò)展):

nginx access log 分析

nginx 的 access log 中可以記錄很多有價(jià)值的信息,通過(guò)分析 access log,可以收集到很多指標(biāo)

1.制作nginx的日志切割,每天凌晨切割并壓縮。

  • PV:PV(訪問(wèn)量): 即Page View, 即頁(yè)面瀏覽量或點(diǎn)擊量,用戶每次刷新即被計(jì)算一次。
  • UV:UV(獨(dú)立訪客):即Unique Visitor,訪問(wèn)您網(wǎng)站的一臺(tái)電腦客戶端為一個(gè)訪客。00:00-24:00內(nèi)相同的客戶端只被計(jì)算一次。

工作常用(面試題筆試):

1.根據(jù)訪問(wèn)IP統(tǒng)計(jì)UV

awk '{print $1}'  access.log|sort | uniq -c |wc -l

2.統(tǒng)計(jì)訪問(wèn)URL統(tǒng)計(jì)PV

awk '{print $7}' access.log|wc -l

3.查詢?cè)L問(wèn)最頻繁的URL

awk '{print $7}' access.log|sort | uniq -c |sort -n -k 1 -r|more

4.查詢?cè)L問(wèn)最頻繁的IP

awk '{print $1}' access.log|sort | uniq -c |sort -n -k 1 -r|more

5.查詢?cè)L問(wèn)最頻繁的前10的IP

awk '{print $1}' access.log|sort | uniq -c |sort -n -k 1 -r|head -n 10

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Nginx進(jìn)程調(diào)度問(wèn)題詳解

    Nginx進(jìn)程調(diào)度問(wèn)題詳解

    Nginx采用的是固定數(shù)量的多進(jìn)程模型,由一個(gè)主進(jìn)程(MasterProcess)和數(shù)量與主機(jī)CPU核數(shù)相同的工作進(jìn)程協(xié)同處理各種事件。這篇文章主要介紹了Nginx進(jìn)程調(diào)度問(wèn)題,需要的朋友可以參考下
    2021-09-09
  • Nginx之proxy_redirect使用詳解

    Nginx之proxy_redirect使用詳解

    這篇文章主要介紹了Nginx之proxy_redirect使用詳解,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-12-12
  • 歐拉部署nginx的實(shí)現(xiàn)步驟

    歐拉部署nginx的實(shí)現(xiàn)步驟

    本文主要介紹了歐拉部署nginx的實(shí)現(xiàn)步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2024-08-08
  • Nginx中多種負(fù)載均衡策略配置的實(shí)戰(zhàn)指南

    Nginx中多種負(fù)載均衡策略配置的實(shí)戰(zhàn)指南

    在當(dāng)今高并發(fā)、大流量的互聯(lián)網(wǎng)應(yīng)用中,單臺(tái)服務(wù)器往往難以承受巨大的訪問(wèn)壓力,負(fù)載均衡作為解決這一問(wèn)題的關(guān)鍵技術(shù),能夠?qū)⒄?qǐng)求分發(fā)到多臺(tái)服務(wù)器上,本文將深入探討Nginx負(fù)載均衡的各種策略和配置方法,大家可以根據(jù)需要進(jìn)行選擇
    2025-10-10
  • Windows Server 2016 MySQL數(shù)據(jù)庫(kù)安裝配置詳細(xì)安裝教程

    Windows Server 2016 MySQL數(shù)據(jù)庫(kù)安裝配置詳細(xì)安裝教程

    這篇文章主要介紹了Windows Server 2016 MySQL數(shù)據(jù)庫(kù)安裝配置詳細(xì)安裝教程,需要的朋友可以參考下
    2017-08-08
  • Nginx處理跨域問(wèn)題小結(jié)

    Nginx處理跨域問(wèn)題小結(jié)

    這篇文章主要介紹了Nginx處理跨域問(wèn)題小結(jié),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2024-01-01
  • Nginx?Rewrit實(shí)現(xiàn)網(wǎng)頁(yè)跳轉(zhuǎn)功能詳細(xì)步驟

    Nginx?Rewrit實(shí)現(xiàn)網(wǎng)頁(yè)跳轉(zhuǎn)功能詳細(xì)步驟

    Rewrite主要實(shí)現(xiàn)url地址重寫(xiě),以及重定向,就是把傳入web的請(qǐng)求重定向到其他url的過(guò)程,這篇文章主要介紹了Nginx?Rewrit實(shí)現(xiàn)網(wǎng)頁(yè)跳轉(zhuǎn)功能詳細(xì)步驟,需要的朋友可以參考下
    2024-02-02
  • Nginx配置文件nginx.conf的基本配置實(shí)例詳解

    Nginx配置文件nginx.conf的基本配置實(shí)例詳解

    Nginx(engine x)是一個(gè)輕量級(jí)的高性能的HTTP和反向代理web服務(wù)器及電子郵件(IMAP/POP3)代理服務(wù)器,下面這篇文章主要給大家介紹了關(guān)于Nginx配置文件nginx.conf基本配置的相關(guān)資料,需要的朋友可以參考下
    2022-09-09
  • Nginx HTTPS代理大文件加載失敗的排查與解決方案

    Nginx HTTPS代理大文件加載失敗的排查與解決方案

    本文基于一次生產(chǎn)環(huán)境中的實(shí)際案例,詳細(xì)解析了Nginx代理配置不當(dāng)導(dǎo)致HTTPS訪問(wèn)下前端資源加載失敗的問(wèn)題,通過(guò)日志分析、參數(shù)調(diào)優(yōu)和原理說(shuō)明,為開(kāi)發(fā)者提供完整的排查思路與解決方案,需要的朋友可以參考下
    2025-12-12
  • Keepalived搭建nginx高可用的實(shí)現(xiàn)

    Keepalived搭建nginx高可用的實(shí)現(xiàn)

    這篇文章主要介紹了Keepalived搭建nginx高可用的實(shí)現(xiàn),通過(guò)VIP實(shí)現(xiàn)主備切換,檢測(cè)進(jìn)程狀態(tài)確保服務(wù)可用,具有一定的參考價(jià)值,感興趣的可以了解一下
    2025-05-05

最新評(píng)論

连城县| 板桥市| 邵东县| 伊川县| 乌拉特后旗| 楚雄市| 武安市| 长治市| 台中市| 嵊州市| 合作市| 丹凤县| 铜陵市| 师宗县| 石柱| 开鲁县| 托克托县| 察隅县| 舒兰市| 肥东县| 保亭| 兴文县| 栾川县| 扶余县| 鲁甸县| 阿瓦提县| 华阴市| 邹城市| 长顺县| 商城县| 基隆市| 西乌珠穆沁旗| 乌恰县| 桃江县| 中西区| 集安市| 清丰县| 灵山县| 陇南市| 宝坻区| 苏尼特右旗|