说明:access.log 的格式是可以自己自定义,输出的信息格式在nginx.conf中设置

一般默认配置如下:

http {
...
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
...
}

示例:

39.107.234.70 - - [02/Feb/2023:11:18:29 +0800] "POST /oauth/getJsapiToken HTTP/1.0" 200 109
"https://mapi.../reserved/index.html" "Mozilla/5....PhoneType/Phone mPaaSClient" "2409..., 36.156.119.45, 100.62.78.190, 10.145.210.210, 220.191.249.136"

日志参数详解:

$remote_addr 是离服务器“最近”的 IP。没有使用代理时,也就是客户端 IP。使用一层代理时,也就是代理的 IP。使用多层代理时,也就是最近一个(最靠近服务器)的代理的 IP。客户端IP 39.107.234.70
$remote_user 客户端用户名称 - -
$time_local 访问时间和时区 02/Feb/2023:11:18:29 +0800
$request 请求的URL和http协议 POST /oauth/getJsapiToken HTTP/1.0
$status http请求状态 200
$body_bytes_sent 客户端发送文件内容大小 109
$http_referer url跳转来源 "https://mapi.../reserved/index.html"
$http_user_agent 用户终端浏览器信息 "Mozilla/5....PhoneType/Phone mPaaSClient"
$http_x_forwarded_for 用以记录原有的客户端IP地址和原来客户端请求的服务器地址 "2409..., 36.156.119.45, 100.62.78.190, 10.145.210.210, 220.191.249.136"

http_x_forwarded_for说明:
假设将Nginx服务器作为Web服务器,位于负载均衡设备、Squid、Nginx反向代理之后,不能获取到客户端的真实IP地址了。
原因是经过反向代理后,由于在客户端和Web服务器之间增加了中间层,因此Web服务器无法直接拿到客户端的IP。
通过$remote_addr变量拿到的将是反向代理服务器的IP地址。 但是,反向代理服务器在转发请求的HTTP头信息中,可以增加X-Forwarded-For信息,
用以记录原有的客户端IP地址和原来客户端请求的服务器地址。
这时候,要用log_format指令设置日志格式,让日志记录X-Forearded-For信息中的IP地址,即客户的真实IP。

参考示例:

log_format access_json '{"@timestamp":"$time_local",'
'"host":"$server_addr",'
'"clientip":"$remote_addr",'
'"size":$body_bytes_sent,'
'"responsetime":$request_time,'
'"upstreamtime":"$upstream_response_time",'
'"upstreamhost":"$upstream_addr",'
'"http_host":"$host",'
'"uri":"$uri",'
'"domain":"$host",'
'"x_forwarded_for":"$http_x_forwarded_for",' //接收透传
'"X-Real-IP":"$remote_addr",'
'"referer":"$http_referer",'
'"tcp_xff":"$proxy_protocol_addr",'
'"http_user_agent":"$http_user_agent",'
'"status":"$status"}';

说明:此文档仅用于记录参考,不做其他用途

最新文章

  1. WPF 3D 知识点大全以及实例
  2. web系统登陆页面增加验证码
  3. 老王讲自制RPC框架.(二.动态代理)
  4. 实现图片的2次缩放后再进行candy边缘检测
  5. Cross-Browser HTML5 Placeholder Text
  6. Ambiguous handler methods mapped for HTTP path
  7. 深入理解 Spring 事务原理
  8. .NET序列化的一点技巧
  9. .NET的JSON格式数据的三种转换方式
  10. LinkedList的源码分析
  11. 原生js实现删除class和添加class
  12. linux下的~/
  13. 12-openldap使用AD密码
  14. 红黑树与AVL
  15. 从今天开始 每天记录HTML,CSS 部分的学习笔记
  16. Containerpilot 配置文件模板
  17. helm 安装prometheus operator 并监控ingress
  18. js事件在不同浏览器之间的差异
  19. React组件通信
  20. PHP7卓越性能背后的原理有哪些?

热门文章

  1. SpringMVC:RESTful案例
  2. rotate matrix
  3. oracle 设置用户永不过期
  4. 10.MyBatis-Plus的使用
  5. 洛谷P3933 Chtholly Nota Seniorious
  6. Educational Codeforces Round 137 (Rated for Div. 2) - E. FTL
  7. 将视图直接转换成表的SQL语句
  8. AppCrawler自动遍历工具,适用于移动端
  9. pwn基础
  10. LINUX 简单命令学习总结