介紹在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 查看日誌;
發現第一條日誌記錄有相關字段信息,是後端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 查看日誌;
發現第一條日誌記錄無相關字段信息,是後端nginx服務的日誌信息;第二條日誌有字段相關信息,是代理nginx服務器的日誌;
結論:使用set自定義字段時,代理nginx能直接獲取到自定義的相關信息;