1. 程式人生 > >Nginx自定義請求頭欄位

Nginx自定義請求頭欄位

介紹在nginx中自定義請求頭欄位,並在日誌中展示相關欄位的值: 

第一種方法: 

1 在代理nginx伺服器配置中增加兩個proxy_set_header欄位,一個iden,一個age,分別賦值為"student","21",我們將來在日誌中看到這兩個常量;

server {

    server_name 127.0.0.1;

    listen 80;

    location /header {

        default_type "text/plain";

        access_log /data/nginx/log/proxy_header.log api;

        proxy_redirect     off;

        proxy_set_header   iden    "student";

        proxy_set_header   age     "21";

        proxy_set_header   Host    $host;

        proxy_pass http://127.0.0.1:88;

     } 

}

此時代理nginx將請求頭重寫,傳入後端伺服器,所以在此nginx伺服器日誌上看不到相關欄位資訊,為了演示方便,將此服務轉發到同機器88埠的服務上;


2 配置後端服務相關配置:埠號88,返回200;

server {

    server_name 127.0.0.1;

    listen 88;


    location / {

        access_log /data/nginx/log/proxy_header.log api;

        proxy_redirect     off;

        proxy_set_header   Host    $host;

        default_type "text/plain";

        return 200 "OK";

    }

}


3 在 api的log_format中,增加兩個欄位;

"$http_iden" "$http_age"


4 curl 測試介面;

curl http://127.0.0.1/header


5 檢視日誌;

image.png

發現第一條日誌記錄有相關欄位資訊,是後端nginx服務的日誌資訊;第二條日誌無欄位相關資訊,是代理nginx伺服器的日誌;


結論:使用proxy_set_header自定義欄位時,後端伺服器日誌能獲取到自定義的相關資訊;


第二種方法:

1 在代理nginx伺服器中配置set 關鍵字,定義兩個欄位,同樣轉發到統計器的88埠;

server {

    server_name 127.0.0.1;

    listen 80;

    location /header {

        set $iden "student";

        set $age "21";

        default_type "text/plain";

        access_log /data/nginx/log/proxy_header.log api;

        proxy_redirect     off;

        proxy_set_header   Host    $host;

        proxy_pass http://127.0.0.1:88;

    }


}


2 配置後端服務相關配置:埠號88,返回200,與第一種方法保持一致;

server {

    server_name 127.0.0.1;

    listen 88;


    location / {

        access_log /data/nginx/log/proxy_header.log api;

        proxy_redirect     off;

        proxy_set_header   Host    $host;

        default_type "text/plain";

        return 200 "OK";

    }

}


3 修改api的log_format中的兩個欄位;

"$iden" "$age"


4 curl 測試介面;

curl http://127.0.0.1/header


5 檢視日誌;

image.png

發現第一條日誌記錄無相關欄位資訊,是後端nginx服務的日誌資訊;第二條日誌有欄位相關資訊,是代理nginx伺服器的日誌;


結論:使用set自定義欄位時,代理nginx能直接獲取到自定義的相關資訊;