1. 程式人生 > >深入Nginx之《常用變量配置技巧》

深入Nginx之《常用變量配置技巧》

sch add 做了 cati 深入 stream resp 用戶 cto

Nginx變量主要用在日誌的記錄和分析,還有業務邏輯的處理。下面將介紹一些常用變量配置手段,在實際應用中發揮作用:


1、$arg_name

舉例:請求默認去a服務,如果URL中參數是 at=5 的請求,就去b服務:

location / {
        if ($arg_at=‘5‘) {
                proxy_pass http://b;
                }
        proxy_pass http://a;
}

2、$body_bytes_sent 和 $bytes_sent
這2個變量的值,指存在http響應頭大小的差異,如果2個值結果非常懸殊,那麽響應頭就輸出了很大的內容,需要確保Nginx的proxy_buffer有關的大小合適,如果超過了proxy_buffer有關的默認值,這個時候error.log會顯示:

2017/11/24 11:49:06 [error] 8376#0: *28071 upstream sent too big header while reading response header from upstream,

讀者可以嘗試修改如下參數來解決,具體的值,請評估自身的需求:

proxy_buffers 4 256k;
proxy_buffer_size 128k;
proxy_busy_buffers_size 256k;

3、$realip_remote_addr

Nginx1.9.7加入的變量,通過realip模塊操作過後的$remote_addr會變成客戶端的IP,從而避免獲得和Nginx直連的代理服務器IP(比如CDN的加速服務器IP),通過此變量就可以獲得直連Nginx服務器的ip了。

4、$request_time 和 $upstream_response_time
$upstream_response_time表示的是後端的響應能力;
$request_time包含了請求全部發送出去的時間,因此包含了整個網絡傳輸時間。如果要檢查後端的服務性能快慢,需要使用$upstream_response_time的值。

5、$uri 和 $request_uri
$uri 記錄了在內部做了rewrite等一些列的內部重定向後的最終請求到上遊服務器得URL(不包含參數$args的值),$request_uri是記錄的當前請求的原始URL(包含了參數),(如果沒有做內部重定向操作,$request_uri去掉參數後就和$uri一樣的)。在線上排查問題時,有些時候後端看到的請求和Nginx中存放的$request_uri無法匹配,這種情況下,就需要考慮應該在 $uri裏面進行搜尋。

6、$scheme

近幾年https非常的流行,很多互聯網企業都將http請求切換到了https,用戶手動輸入網站的時候,很少會主動加上https:// ,所以為了將用戶跳轉到https,我們需要知道用戶是請求的是http還是https。$scheme 就可以知道用戶訪問的是https還是http,並且通過rewrite跳轉到https。

    if ($scheme = ‘http‘) {
            rewrite ^/(.*)$ https://$host/$1 redirect;
            }

技術分享圖片

深入Nginx之《常用變量配置技巧》