访问日志主要记录客户端访问Nginx的每一个请求,格式可以自定义。通过访问日志,你可以得到用户地域来源、跳转来源、使用终端、某个URL访问量等相关信息。

Nginx中访问日志相关指令主要有两条,一条是log_format,用来设置日志的格式,另外一条是access_log,用来指定日志文职的存放路径、格式和缓存大小。两条指令在Nginx配置文件中的位置可以在http之间。

日志配置

log_format

log_format用来设置日志格式,格式如下所示

  1. log_format name(名称) format(格式)

在Nginx中有自己默认的日志格式,如下内容:

  1. #log_format main '$remote_addr - $remote_user [$time_local] "$request" '
  2. # '$status $body_bytes_sent "$http_referer" '
  3. # '"$http_user_agent" "$http_x_forwarded_for"';

这段内容什么意思呢?我们来理解下。

  • $remote_addr:客户端的ip地址(如果中间有代理服务器那么这里显示的ip就为代理服务器的ip地址)
  • $remote_user:用于记录远程客户端的用户名称(一般为“-”)
  • $time_local:用于记录访问时间和时区
  • $request:用于记录请求的url以及请求方法
  • $status:响应状态码
  • $body_bytes_sent:给客户端发送的文件主体内容大小
  • $http_referer:可以记录用户是从哪个链接访问过来的
  • $http_user_agent:用户所使用的代理(一般为浏览器)
  • $http_x_forwarded_for:可以记录客户端IP,通过代理服务器来记录客户端的ip地址

现在,我们添加一个我们自定义日志信息。例如,如果我们用Nginx作为反向代理服务,就不能获取客户端的真实IP地址IP了,因为经过反向代理后,在客户端和Web服务器之间增加了中间层,因此Web服务器无法直接拿到客户端的IP。

  1. log_format mylog '$remote_addr [$time_local] "$request" $status';

日志格式允许包含的变量注释,如下所示

  1. $remote_addr, $http_x_forwarded_for 记录客户端IP地址
  2. $remote_user 记录客户端用户名称
  3. $request 记录请求的URL和HTTP协议
  4. $status 记录请求状态
  5. $body_bytes_sent 发送给客户端的字节数,不包括响应头的大小; 该变量与Apache模块mod_log_config里的“%B”参数兼容。
  6. $bytes_sent 发送给客户端的总字节数。
  7. $connection 连接的序列号。
  8. $connection_requests 当前通过一个连接获得的请求数量。
  9. $msec 日志写入时间。单位为秒,精度是毫秒。
  10. $pipe 如果请求是通过HTTP流水线(pipelined)发送,pipe值为“p”,否则为“.”。
  11. $http_referer 记录从哪个页面链接访问过来的
  12. $http_user_agent 记录客户端浏览器相关信息
  13. $request_length 请求的长度(包括请求行,请求头和请求正文)。
  14. $request_time 请求处理时间,单位为秒,精度毫秒; 从读入客户端的第一个字节开始,直到把最后一个字符发送给客户端后进行日志写入为止。
  15. $time_iso8601 ISO8601标准格式下的本地时间。
  16. $time_local 通用日志格式下的本地时间。

access_log

用log_format指令设置了日志格式之后,需要用access_log指令指定日志文件存放路径。

格式如下所示

  1. access_log path(存放路径) [format(自定义日志格式名称) [buffer=size | off]]

在Nginx中有自己默认的日志路径,如下内容:

  1. #access_log logs/access.log main;

如果想关闭日志,可以如下:

  1. access_log off;

值得注意的是,Nginx进程设置的用户和组必须对日志路径有创建文件的权限,否则,会报错。

此外,对于每一条日志记录,都将是先打开文件,再写入日志,然后关闭。可以使用open_log_file_cache来设置日志文件缓存(默认是off)。

日志切割

当网站访问量大后,日志数据就会很多,如果全部写到一个日志文件中去,文件会变得越来越大。文件大速度就会慢下来,比如一个文件几百兆。写入日志的时候,会影响操作速度。另外,如果我想看看访问日志,一个几百兆的文件,下载下来打开也很慢。

为了方便对日志进行分析计算,需要对日志进行定时切割。定时切割的方式有按照月切割、按天切割,按小时切割等。最常用的是按天切割。

配置shell脚本

  1. #!/bin/bash
  2. # 设置日志文件存放目录
  3. logs_path="/var/logs/nginx/"
  4. # 设置pid文件
  5. pid_path="/usr/local/dev/nginx/nginx.pid"
  6. # 重命名日志文件
  7. mv ${logs_path}access.log ${logs_path}access_$(date -d "yesterday" +"%Y%m%d").log
  8. # 向nginx主进程发信号重新打开日志
  9. kill -USR1 `cat ${pid_path}`

crontab中设置定时作业

进行编辑

  1. crontab -e

配置内容如下

  1. 0 0 * * * bash /usr/local/dev/nginx/nginx_log.sh

这样在每天的夜晚12点就会自动创建备份文件了。.

Nginx日志配置与切割的更多相关文章

  1. nginx高性能WEB服务器系列之八--nginx日志分析与切割

    nginx系列友情链接:nginx高性能WEB服务器系列之一简介及安装https://www.cnblogs.com/maxtgood/p/9597596.htmlnginx高性能WEB服务器系列之二 ...

  2. nginx日志配置

    nginx日志配置 http://www.ttlsa.com/linux/the-nginx-log-configuration/ 日志对于统计排错来说非常有利的.本文总结了nginx日志相关的配置如 ...

  3. Linux下添加shell脚本使得nginx日志每天定时切割压缩

    Linux下添加shell脚本使得nginx日志每天定时切割压缩一 简介 对于nginx的日志文件,特别是access日志,如果我们不做任何处理的话,最后这个文件将会变得非常庞大 这时,无论是出现异常 ...

  4. (转)nginx日志配置指令详解

    这篇文章主要介绍了nginx日志配置指令详解,nginx有一个非常灵活的日志记录模式,每个级别的配置可以有各自独立的访问日志,需要的朋友可以参考下日志对于统计排错来说非常有利的.本文总结了nginx日 ...

  5. Nginx https加密以及nginx日志配置与管理

    Nginx https加密以及nginx日志配置与管理 使用Nginx的优点Nginx作为WEB服务器,Nginx处理静态文件.索引文件.自动索引的效率非常高.Nginx作为代理服务器,Nginx可以 ...

  6. nginx日志配置指令详解

    这篇文章主要介绍了nginx日志配置指令详解,nginx有一个非常灵活的日志记录模式,每个级别的配置可以有各自独立的访问日志,需要的朋友可以参考下日志对于统计排错来说非常有利的.本文总结了nginx日 ...

  7. Nginx日志按天切割基本配置说明

    1.声明日志格式 声明log    log位置                log格式; access_log logs/access.log main; 2.定义日志格式(以下为常用的日志格式 可 ...

  8. Nginx日志配置及日志切割

    日志配置 日志对于统计排错来说非常有利的.本文总结了nginx日志相关的配置如access_log.log_format.open_log_file_cache.log_not_found.log_s ...

  9. Nginx实战(三) 日志配置与切割

    访问日志主要记录客户端访问Nginx的每一个请求,格式可以自定义.通过访问日志,你可以得到用户地域来源.跳转来源.使用终端.某个URL访问量等相关信息. Nginx中访问日志相关指令主要有两条,一条是 ...

随机推荐

  1. Number Triangles

    题目描述 Consider the number triangle shown below. Write a program that calculates the highest sum of nu ...

  2. Apache CXF实战之四 构建RESTful Web Service

    Apache CXF实战之一 Hello World Web Service Apache CXF实战之二 集成Sping与Web容器 Apache CXF实战之三 传输Java对象 这篇文章介绍一下 ...

  3. Web/JAVA 简单题目汇总

    [Java标识符,变量.常量] 一.Java合法标识符命名规则 (1)区分字母大小写,标识符长度不限 (2)  英文,Unicode码双字节文字字符(日文,韩文,中文),数字,下划线,$(美元符号)均 ...

  4. JSP(待更新)

    1.概念: 所谓JSP就是在HTML中嵌入大量的java代码而已.

  5. linux-网络监控命令-netstat初级

    简介 Netstat 命令用于显示各种网络相关信息,如网络连接,路由表,接口状态 (Interface Statistics),masquerade 连接,多播成员 (Multicast Member ...

  6. ASIHTTPRequest框架使用总结系列之阿堂教程1(安装配置篇

    在前年,阿堂在<IOS开发系列之阿堂教程:玩转IPhone客户端和Web服务端交互(客户端)实践>一文中,对于ASIHTTPRequest框架有过一些介简单绍,具体链接地址见http:// ...

  7. [置顶] Python+Django 复选框选择多个 提交只能保存单个

    之前,做表单时使用单选方式,今天修改为复选框方式提交. 问题来了:在选择多个后保存,发现竟然只能最后一个选择. print(request.POST)显示只有最后一个 print(str(reques ...

  8. 路由器漏洞复现分析第二弹:CNVD-2018-01084

    1月17日,CNVD公开了D-LinkDIR 615/645/815 service.cgi远程命令执行漏洞(CNVD-2018-01084),freebuf上有前辈写了一篇漏洞复现和poc的文章(h ...

  9. Hadoop之Flume详解

    1.日志采集框架Flume 1.1 Flume介绍 Flume是一个分布式.可靠.和高可用的海量日志采集.聚合和传输的系统. Flume可以采集文件,socket数据包等各种形式源数据,又可以将采集到 ...

  10. [Algorithms] Using Dynamic Programming to Solve longest common subsequence problem

    Let's say we have two strings: str1 = 'ACDEB' str2 = 'AEBC' We need to find the longest common subse ...