Nginx 之 stub_status log gzip rewrite regerer header 模塊介紹
1 概述
本文將介紹如下的六個模塊,介紹其相關的功能和配置
ngx_http_stub_status_module模塊
ngx_http_log_module模塊
ngx_http_gzip_module模塊
ngx_http_rewrite_module模塊
ngx_http_referer_module模塊
ngx_http_headers_module模塊
2 ngx_http_stub_status_module模塊
用於輸出nginx的基本狀態信息
輸出信息示例:
Active connections: 291 server accepts handled requests 16630948 16630948 31070465
對應上面accepts,handled,requests三個值
Reading: 6 Writing: 179 Waiting: 106
輸出內容字段解釋如下:
Active connections:當前狀態,活動狀態的連接數 accepts:統計總值,已經接受的客戶端請求的總數 handled:統計總值,已經處理完成的客戶端請求的總數 requests:統計總值,客戶端發來的總的請求數 Reading:當前狀態,正在讀取客戶端請求報文首部的連接的連接數 Writing:當前狀態,正在向客戶端發送響應報文過程中的連接數 Waiting:當前狀態,正在等待客戶端發出請求的空閑連接數
stub_status;
示例:
名字可以更改,如把basic_status改為status.同時建議加上權限,這樣比較安全,如僅允許172.18.50.99這臺機器才能訪問該網站
location /status { stub_status; allow 172.18.50.99; deny all; }
3 ngx_http_log_module模塊
指定日誌格式記錄請求,首先要定義log的格式和該格式的名稱,然後再通過格式的名稱對定義的log進行調用,調用是指定生成日誌的路徑。
.1、log_format
log_format name string ...;
string可以使用nginx核心模塊及其它模塊內嵌的變量
.2、access_log
access_log path [format [buffer=size] [gzip[=level]] [flush=time] [if=condition]];
訪問日誌文件路徑,格式及相關的緩沖的配置
access_log off;關閉日誌的記錄
.示例
log_format compression ‘$remote_addr-$remote_user[$time_local] ‘ ‘"$request" $status $bytes_sent‘‘"$http_referer" "$http_user_agent""$gzip_ratio"‘;
access_log /spool/logs/nginx-access.log compressionbuffer=32k;
.3、open_log_file_cache
open_log_file_cache max=N [inactive=time] [min_uses=N] [valid=time]; open_log_file_cache off;
緩存各日誌文件相關的元數據信息
max:緩存的最大文件描述符數量
min_uses:在inactive指定的時長內訪問大於等於此值方可被當作活動項
inactive:非活動時長
valid:驗正緩存中各緩存項是否為活動項的時間間隔
4 ngx_http_gzip_module模塊
用gzip方法壓縮響應數據,節約帶寬,默認是nginx服務不壓縮文件,但是由於互聯網帶寬成本高,所以一般都是要對服務器上的文件進行壓縮,故需要啟用改功能。
.1、gzip
gzip on | off;
啟用或禁用gzip壓縮
.2、gzip_comp_level
gzip_comp_level level;
壓縮比由低到高:1 到9,默認:1
.3、gzip_disable
gzip_disable regex ...;
匹配到客戶端瀏覽器不執行壓縮
.4、gzip_min_lengthlength;
啟用壓縮功能的響應報文大小閾值
.5、gzip_http_version
gzip_http_version 1.0 | 1.1;
設定啟用壓縮功能時,協議的最小版本,默認:1.1
.6、gzip_buffers
gzip_buffers number size;
支持實現壓縮功能時緩沖區數量及每個緩存區的大小,默認:32 4k 或168k
.7、gzip_types
gzip_types mime-type ...;
指明僅對哪些類型的資源執行壓縮操作;即壓縮過濾器
默認包含有text/html,不用顯示指定,否則出錯
一般而言,文本的適合壓縮,但是jpg一般是壓縮過才放到服務器上,所以有些格式就不用再次壓縮,防止對服務器造成不必要的負擔
cat /etc/nginx/mime.tyeps來查看壓縮的類型有哪些
.8、gzip_vary
gzip_vary on | off;
如果啟用壓縮,是否在響應報文首部插入“Vary: Accept-Encoding”
.9、gzip_proxied
gzip_proxied off | expired | no-cache | no-store | private| no_last_modified| no_etag| auth| any ...;
nginx對於代理服務器請求的響應報文,在何種條件下啟用壓縮功能
這個功能是針對nginx充當代理來說的,如果不是代理,該選項就不用處理
off:對被代理的請求不啟用壓縮
expired,no-cache, no-store,private:對代理服務器請求的響應報文首部Cache-Control值任何一個,啟用壓縮功能
.示例:
server { ...... gzip on; gzip_comp_level 6; gzip_min_length 64; gzip_proxied any; gzip_types text/xml text/css application/javascripttext/plain; }
測試,瀏覽器要支持壓縮,curl命令要加--compressed才支持壓縮,顯示支持壓縮,gzip,但是沒有顯示壓縮後的大小
curl -I --compress http://172.18.50.73/m.txt
5 ngx_http_rewrite_module模塊:
將用戶請求的URI基於PCRE regex所描述的模式進行檢查,而後完成重定向替換
當舊的業務和新的業務不一樣,網站更名了,如網站名原來是www.dianping.com/zz後面改名為www.dianping.com/zhengzhou
.1、rewrite
rewrite regex replacement [flag]
將用戶請求的URI基於regex所描述的模式進行檢查,匹配到時將其替換為replacement指定的新的URI
註意:如果在同一級配置塊中存在多個rewrite規則,那麽會自上而下逐個檢查;被某條件規則替換完成後,會重新一輪的替換檢查
隱含有循環機制,但不超過10次;如果超過,提示500響應碼,[flag]所表示的標誌位用於控制此循環機制
如果replacement是以http://或https://開頭,則替換結果會直接以重向返回給客戶端
.[flag]:有以下幾個關鍵字
last:重寫完成後停止對當前URI在當前location中後續的其它重寫操作,而後對新的URI啟動新一輪重寫檢查;提前重啟新一輪循環
break:重寫完成後停止對當前URI在當前location中後續的其它重寫操作,而後直接跳轉至重寫規則配置塊之後的其它配置;結束循環,建議在location中使用
last 和break是在服務器內部操作的,客戶端不知道,客戶端訪問的url不會發生變化。但是服務器端會返回替換過的新的內容。
redirect和permanent是服務器端給客戶端發一個301或者302的請求,客戶端需要重新發起請求,因此最終客戶端看到的瀏覽器是url和原始的url是不一樣的,url會被轉換,如將fj改成成fujian,那麽當用戶訪問的是http://172.18.50.73/fj/ 最終返回結果的時候,瀏覽器上的url會變更改為http://172.18.50.73/fujian/
redirect:臨時重定向,重寫完成後以臨時重定向方式直接返回重寫後生成的新URI給客戶端,由客戶端重新發起請求;不能以http://或https://開頭,使用相對路徑,狀態碼:302
permanent:重寫完成後以永久重定向方式直接返回重寫後生成的新URI給客戶端,由客戶端重新發起請求,狀態碼:301
例子
以下是正則表達式,$1表示前面的(.*).寫在server段或者location段裏,以下四個選項只需四選一。
rewrite ^/fj/(.*)$ /fujian/$1 last | break |redirect |permanent;
測試
curl -L http://172.18.50.73/fj/
或者直接在瀏覽器裏輸入http://172.18.50.73/fj/查看結果
.2、return
return 返回一個具體的地址
return code [text];
return code URL;
停止處理並將指定的代碼返回給客戶端。非標準代碼444關閉連接而不發送響應頭。
從版本0.8.42開始,可以指定重定向URL(代碼301,302,303,307和308)或響應正文文本(對於其他代碼)。響應正文文本和重定向網址可以包含變量。作為特殊情況,重定向URL可以指定為此服務器本地的URI,在這種情況下,根據請求方案($ scheme)和server_name_in_redirect和port_in_redirect指令形成完整的重定向URL。
此外,可以將用於代碼302的臨時重定向的URL指定為唯一的參數。這樣的參數應以“http://”,“https://”或“$ scheme”字符串開頭。 URL可以包含變量。
測試,能正常返回text,
return URL;
停止處理,並返回給客戶端指定的響應碼。但是實際測試都是多次循環重定向,導致url不能打開,用curl命令測試,出現了報錯:curl: (47) Maximum(50) redirects followed導致實驗不成功
.3、rewrite_log
rewrite_log on | off;
是否開啟重寫日誌, 發送至error_log(notice level)
.4、set
set $variable value;
用戶自定義變量,註意:變量定義和調用都要以$開頭
.5、if
if (condition) { ... }
引入新的上下文,條件滿足時,執行配置塊中的配置指令;server,location
condition:比較操作符:
== 相同
!= 不同
~:模式匹配,區分字符大小寫
~*:模式匹配,不區分字符大小寫
!~:模式不匹配,區分字符大小寫
!~*:模式不匹配,不區分字符大小寫
文件及目錄存在性判斷:
-e, !-e 存在(包括文件,目錄,軟鏈接)
-f, !-f 文件
-d, !-d 目錄
-x, !-x 執行
6 ngx_http_referer_module模塊
referer是指從哪兒跳轉,該字段可以用來防止盜鏈。
比如網頁內有代碼<a href=http://172.18.50.73/m.txt>test referer </a>那麽再網頁上test referer就會有鏈接到資源http://172.18.50.73/m.txt上,點擊該鏈接,log就會有對應的referer在code之後,如這裏是http://172.18.50.73/a.html,如果沒有referer,則code後的字段顯示“-”
.1、valid_referers none|blocked|server_names|string...;
定義referer首部的合法可用值,不能匹配的將是非法值
none:請求報文首部沒有referer首部
blocked:請求報文有referer首部,但無有效值
server_names:參數,其可以有值作為主機名或主機名模式
arbitrary_string:任意字符串,但可使用*作通配符
regular expression:被指定的正則表達式模式匹配到的字符串,要使用~開頭,例如:~.*\.magedu\.com
.示例:
valid_referers none blocked server_names *.sunny.com ~\.sunny\.~\.baidu\.;
#定義有效的referers
if ($invalid_referer) { return 403; }
#定義如果出現無效的referer將返回code 403
7 ngx_http_headers_module模塊
向由代理服務器響應給客戶端的響應報文添加自定義首部,或修改指定首部的值
.1、add_header
add_header name value [always];
例子
添加自定義首部,在server 配置段裏添加如下的配置
add_header proxy_name sunny_proxy; add_header sunny_X-Via $server_addr; add_header sunny_X-Cache $upstream_cache_status; add_header sunny_X-Accel $server_name;
測試
curl -I http://172.18.50.73/m.txt
那麽在返回的報文頭部信息裏多了如下的四行信息:
proxy_name: sunny_proxy sunny_X-Via: 172.18.50.73 sunny_X-Cache: MISS sunny_X-Accel: www.sunny.com
2、add_trailer
add_trailer name value [always];
添加自定義響應信息的尾部,沒測試通過,提示報錯未知指令“add_trailer”
本文出自 “陽光運維” 博客,請務必保留此出處http://ghbsunny.blog.51cto.com/7759574/1977260
Nginx 之 stub_status log gzip rewrite regerer header 模塊介紹