浏览 2.8k
按点赞数排序
按时间排序
介绍在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服务器的日志;
1
回答于2020-05-08 16:18
Nginx的官方模块中,没有toa_remote_addr这个变量。这个变量是哪个第三方模块的?你确认通过configure --add-module=...编译进Nginx了吗?