nginx在access日志中记录请求头和响应头用作用户身份标识分析

在应用系统中,有时将请求的用户信息和身份认证信息放到请求头中,服务器认证通过后,通过cookie返回客户端一个标识,在后续的请求时,客户端需要带上这个cookie,通过这个cookie,服务器就知道请求的用户信息了,没有必要每次请求都携带用户信息和认证信息。

1. 日志格式自定义

自定义需要的日志格式。

复制代码
log_format  custom_log  '$remote_addr - $remote_user [$time_local] "$request" '
                   '$status "$http_user_agent" "$http_x_forwarded_for" 
                   authorization="$http_authorization" cookie="$sent_http_set_cookie" ';

可以看出,这里定义了格式custom_log,这里记录了请求头authorization和响应头cookie。其他的信息,可以根据实际需要进行记录或者不记录。

2. 日志记录条件

复制代码
location /ngtest {
		set $loggable '0';
		# 检查请求头
		if ( $http_authorization ) {
			set $loggable '1';
		}

		# 检查响应头
		#if ( $sent_http_set_cookie ) {
		#    set $loggable '$loggable';
		#}

		#if ($loggable = 11) {
		#    access_log /var/log/nginx/testaccess.log mail;
		#}

		# 根据条件记录日志
		access_log /var/log/nginx/testaccess.log custom_log if=$loggable;

		proxy_pass http://127.0.0.1:8060;

		#root  /usr/share/nginx/html;
}

这里当请求中有authorization请求头时,设置标识loggable为1,在日志记录的时候,根据loggable的只决定是否记录访问日志。

3. 执行访问

使用postman访问配置的url。

可以看到指定的请求头和响应头。

注意:nginx的后端还需要启动一个服务,用于接收请求后返回信息中设置响应头信息。

4. 查看日志记录

复制代码
111.206.85.18 - - [15/Oct/2024:17:36:25 +0800] "GET /ngtest HTTP/1.1" 200 "PostmanRuntime/7.28.4" "-" authorization="NTLM TlRMTVNTUA
ADAAAAGAAYAEAAAADCAMIAWAAAAAAAAAAAAAAAHAAcABoBAAAWABYANgEAAAAAAAAAAAAABYIIAJi+0X/kdkl/ONUQGF7iAm1ii5/nECrNEufop988HOhSTFsJVFvxdXYBAQ
AAAAAAAKAG+Vfn19oBYouf5xAqzRIAAAAAAgAGAE8AVABQAAEAHgBXAEkATgAtAEkAUgBEAFMAVgBKAE8AMwBVAFQAVAAEAA4AbwB0AHAALgBjAG8AbQADAC4AVwBJAE4ALQ
BJAFIARABTAFYASgBPADMAVQBUAFQALgBvAHQAcAAuAGMAbwBtAAUADgBvAHQAcAAuAGMAbwBtAAcACAD4/G0C59faA*******" cookie="mycookie=5ea7df386cd64620bfdef149cedb1a8f; Max-Age=3600; Expires=Tue, 22 Oct 2024 15:46:33 GMT; Path=/"

可以看到,日志中记录了请求头authorization,和响应的cookie。

还有请求的时间,以及请求的IP地址,请求地址,状态码,客户端agent等信息。

需要说明的是,这里记录的是access.log日志,而不是error.log日志。

相关推荐
雨落Liy1 天前
Nginx 从入门到进阶:反向代理、负载均衡与高性能实战指南
运维·nginx·负载均衡
Yyyy4821 天前
Nginx负载均衡集群实验步骤
运维·nginx·负载均衡
qq_264220892 天前
Nginx优化与 SSL/TLS配置
运维·nginx
matlab的学徒2 天前
Web与Nginx网站服务(改)
linux·运维·前端·nginx·tomcat
邂逅星河浪漫2 天前
【Docker+Nginx+Ollama】前后端分离式项目部署(传统打包方式)
java·nginx·docker·部署
IT成长日记2 天前
【Nginx开荒攻略】Nginx主配置文件结构与核心模块详解:从0到1掌握nginx.conf:
linux·运维·nginx·配置文件
ZzzZZzzzZZZzzzz…2 天前
Nginx_Tomcat综合案例
运维·nginx·tomcat·负载均衡·rhce·反向代理·https加密服务
VueVirtuoso3 天前
SaaS 建站从 0 到 1 教程:Vue 动态域名 + 后端子域名管理 + Nginx 配置
前端·vue.js·nginx
007php0073 天前
Redis高级面试题解析:深入理解Redis的工作原理与优化策略
java·开发语言·redis·nginx·缓存·面试·职场和发展
Xxtaoaooo3 天前
Nginx 502 网关错误:upstream 超时配置的踩坑与优化
运维·nginx·负载均衡·502错误·upstream超时