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能直接獲取到自定義的相關信息;



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章