Nginx演练(2)配置日志访问

在互联网企业中,日志分析是特别重要的一个模块。通过对日志的分析,可以获得网站的一些指标信息,和网站访问情况。另外,日志对于统计排错来说非常有利的。

nginx日志相关的配置如access_log、log_format、open_log_file_cache、log_not_found、log_subrequest、rewrite_log、error_log。

日志相关的配置参数

1.access_log指令

1.1语法

Syntax:access_log path [format [buffer=size] [gzip[=level]] [flush=time] [if=condition]];
access_log off;
    
Default:access_log logs/access.log combined;
    
Context:http, server, location, if in location, limit_except

默认值: access_log logs/access.log combined;
配置段: http, server, location, if in location, limit_except
gzip压缩等级。
buffer设置内存缓存区大小。
flush保存在缓存区中的最长时间。
不记录日志:access_log off;

1.2 例子

access_log /path/to/log.gz combined gzip flush=5m;

2. log_format指令

2.1语法

Syntax:    log_format name string ...;
Default:    
log_format combined "...";
Context:    http

name表示格式名称,string表示等义的格式。
log_format有一个默认的无需设置的combined日志格式,相当于apache的combined日志格式。

2.2 例子

log_format combined ‘$remote_addr - $remote_user [$time_local] ‘
                    ‘"$request" $status $body_bytes_sent ‘
                    ‘"$http_referer" "$http_user_agent"‘;

$bytes_sent
the number of bytes sent to a client
$connection
connection serial number
$connection_requests
the current number of requests made through a connection (1.1.18)
$msec
time in seconds with a milliseconds resolution at the time of the log write
$pipe
“p” if request was pipelined, “.” otherwise
$request_length
request length (including request line, header, and request body)
$request_time
request
processing time in seconds with a milliseconds resolution; time elapsed
between the first bytes were read from the client and the log write
after the last bytes were sent to the client
$status
response status
$time_iso8601
local time in the ISO 8601 standard format
$time_local
local time in the Common Log Format

3. open_log_file_cache指令

3.1 语法

Syntax:open_log_file_cache max=N [inactive=time] [min_uses=N] [valid=time];
open_log_file_cache off;
    
Default:open_log_file_cache off;
    
Context:http, server, location    
对于每一条日志记录,都将是先打开文件,再写入日志,然后关闭。可以使用open_log_file_cache来设置日志文件缓存(默认是off),格式如下:
参数注释如下:
max:设置缓存中的最大文件描述符数量,如果缓存被占满,采用LRU算法将描述符关闭。
inactive:设置存活时间,默认是10s
min_uses:设置在inactive时间段内,日志文件最少使用多少次后,该日志文件描述符记入缓存中,默认是1次
valid:设置检查频率,默认60s
off:禁用缓存

3.2 例子

open_log_file_cache max=1000 inactive=20s valid=1m min_uses=2;

4. log_not_found指令

4.1 语法

Syntax:log_not_found on | off;
    
Default:log_not_found on;
    
Context:http, server, location
是否在error_log中记录不存在的错误。默认是。

5. log_subrequest指令

语法: log_subrequest on | off;
默认值: log_subrequest off;
配置段: http, server, location
是否在access_log中记录子请求的访问日志。默认不记录。

6. rewrite_log

由ngx_http_rewrite_module模块提供的。用来记录重写日志的。对于调试重写规则建议开启。 Nginx重写规则指南
语法: rewrite_log on | off;
默认值: rewrite_log off;
配置段: http, server, location, if
启用时将在error log中记录notice级别的重写日志。

7. error_log指令

Syntax:    error_log file [level];
Default:    
error_log logs/error.log error;
Context:    main, http, mail, stream, server, location

语法: error_log file | stderr | syslog:server=address[,parameter=value]
[debug | info | notice | warn | error | crit | alert | emerg];
默认值: error_log logs/error.log error;
配置段: main, http, server, location
配置错误日志。

nginx配置文件如下

http {
    include       mime.types;
    default_type  application/octet-stream;

    log_format  main  ‘$remote_addr - $remote_user [$time_local] "$request" ‘
                      ‘$status $body_bytes_sent "$http_referer" ‘
                      ‘"$http_user_agent" "$http_x_forwarded_for"‘;

    access_log  logs/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;

    server {
        # 监听的IP和端口
        listen 192.168.163.146:80;
        server_name server1.domain.com;
        access_log logs/server1.access.log main;

        location /
        {
            index index.html index.htm;
            #存放目录
            root /u01/up1;
        }
    }

}
cat /usr/local/nginx-1.7.9/logs/server1.access.log
192.168.163.1 - - [29/Aug/2016:14:32:00 +0800] "GET / HTTP/1.1" 200 134 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:48.0) Gecko/20100101 Firefox/48.0" "-"
192.168.163.1 - - [29/Aug/2016:14:32:01 +0800] "GET / HTTP/1.1" 200 134 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:48.0) Gecko/20100101 Firefox/48.0" "-"
192.168.163.1 - - [29/Aug/2016:14:32:01 +0800] "GET / HTTP/1.1" 200 134 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:48.0) Gecko/20100101 Firefox/48.0" "-"
...
192.168.163.1 - - [29/Aug/2016:14:32:03 +0800] "GET / HTTP/1.1" 200 134 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:48.0) Gecko/20100101 Firefox/48.0" "-"
192.168.163.1 - - [29/Aug/2016:14:32:04 +0800] "GET / HTTP/1.1" 200 134 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:48.0) Gecko/20100101 Firefox/48.0" "-"
192.168.163.1 - - [29/Aug/2016:14:32:41 +0800] "GET /index.html HTTP/1.1" 200 134 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:48.0) Gecko/20100101 Firefox/48.0" "-"
192.168.163.1 - - [29/Aug/2016:14:32:48 +0800] "GET /index2html HTTP/1.1" 404 168 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:48.0) Gecko/20100101 Firefox/48.0" "-"
192.168.163.1 - - [29/Aug/2016:14:32:51 +0800] "GET /index2.html HTTP/1.1" 404 168 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:48.0) Gecko/20100101 Firefox/48.0" "-"

整体来说,日志配置非常简单。接下来完成日志切割。

为什么要进行日志切割?

我等苦逼程序员,都有过解决线上BUG的经验吧。如果一个日志文件过大,无论从维护或查看角度来说,都不方便。所以要将日志进行切割,而按日切割是最常见的一种方式。这有点像log4j中的某个appender[org.apache.log4j.DailyRollingFileAppender].

按日切割逻辑很简单。主要分3步。

  1. 备份日志到新文件
  2. 重新启动nginx
  3. 将命令加入cron调度
#!/bin/bash

log_path="/usr/local/nginx-1.7.9/logs/"

pid_path="/usr/local/nginx-1.7.9/conf/nginx.pid"

mkdir -p ${log_path}$(date -d "yesterday" +"%Y")/$(date -d "yesterday" +"%m")/

mv ${log_path}server1.access.log ${log_path}$(date -d "yesterday" +%Y)/$(date -d "yesterday" +%m)/server1.access_$(date -d "yesterday" +%Y%m%d).log

kill  -USR1 `cat ${pid_path}`

笔者对linux不经常写,平时也就是简单玩玩。写上面代码也是参照了网上或书中的例子。结果充满坎坷。

1.由于我使用WINSCP工具原因,在本地使用sublime工具开发,结果出现错误

shell /bin/bash^M: bad interpreter错误解决

2.中间错误将$(date -d "yesterday" +"%Y" 写成 ${date -d "yesterday" +"%Y"}

3.将kill  -USR1 错误写成“kill  -USER1”

Nginx控制信号


TERM, INT


快速关闭


QUIT


从容关闭


HUP


重新加载,用新的配置开始新的工作进程


USER1


重新打开日志文件


USER2


平滑升级可执行程序


WINCH


从容关闭工作进程

()会开启一个新的子shell,{}不会开启一个新的子shell
(())常用于算术运算比较,[[]]常用于字符串的比较.
$()返回括号中命令执行的结果
$(())返回的结果是括号中表达式值
${ }参数替换与扩展

时间: 2024-10-22 01:07:35

Nginx演练(2)配置日志访问的相关文章

Nginx演练(1)配置虚拟主机

Nginx是一款比较流行Web服务器,和Apache,Lighttpd,IIS属于同类产品.对比而言,Nginx从性能和内存占用方面,都非常优秀,具体对比细节自行百度. 三大WEB服务器对比分析(apache ,lighttpd,nginx) 本文演练的主要内容是: 使用Nginx,实现基于IP的虚拟主机 使用Nginx,实现基于域名的虚拟主机 tomcat配置虚拟主机 1.前提 什么是虚拟主机? 虚拟主机使用是特殊的软硬件技术,把一台运行在Internet上的服务器主机分成一台台"虚拟&quo

Nginx演练(3)配置内容压缩

如果对HTTP熟悉的话,对request-response请求过程应该很熟悉. 比如访问"www.jd.com",一个完整页面的访问,往往会经过很多次的HTTP请求共同完成,这中间会涉及到浏览器并发数.具体片段如图 客户端请求的资源内容有多种,jpg,css,js,html等.不同文件类型,对应不同MIME_TYPE.每个文件都要通过网络传输到客户端,才能被浏览器渲染,进而展现给用户.想必大家都有给朋友发送文件的经历吧,不管是QQ传输,还是Email传送.如果一个文件过大,想节省点传输

Nginx和Apache配置日志格式记录Cookie

记录Cookie有什么用? 有时候我们需要通过web服务器的访问日志来统计UV(独立访客),并据此分析用户的行为.而UV是依据cookie数据得出的统计.UV相对于IP的好处是:IP是一个反映网络虚拟地址对象的概念,UV是一个反映实际使用者的概念,更加准确地对应一个实际的浏览者.使用UV作为统计量,可以更加准确的了解单位时间内实际上有多少个访问者来到了相应的页面. 如何记录Cookie? Nginx: 在nginx的配置文件中,可以通过$http_cookie来访问Cookie. 想要记录Coo

Nginx配置:访问日志,日志切割,静态文件不记录日志和过期时间

一.访问日志 1.查看Nginx日志格式 [[email protected] ~]# grep -A2 log_format /usr/local/nginx/conf/nginx.conf log_format combined_realip '$remote_addr $http_x_forwarded_for [$time_local]' ' $host "$request_uri" $status' ' "$http_referer" "$htt

91.Nginx配置:访问日志,日志切割,静态文件不记录日志和过期时间

一.访问日志 1.查看Nginx日志格式 [[email protected] ~]# grep -A2 log_format /usr/local/nginx/conf/nginx.conflog_format combined_realip '$remote_addr $http_x_forwarded_for [$time_local]'' $host "$request_uri" $status'' "$http_referer" "$http_u

nginx+gridfs+mongodb 配置访问png图片显示无法加载问题

上传文件后,浏览器中请求:http://<nginx server ip>:<port>/gfs/<my file> 浏览器出现"无法打开页面"的错误,查看错误日志,http error code 500.error.log中显示:malloc(18446744056529682432) failed (12: Cannot allocate memory), client: <Client IP>, server: localhost,

LNMP第二部分nginx、php配置(用户认证、域名重定向、日志、配置缓存、防盗链)

一.nginx的配置( nginx.conf) 1.nginx的主配置文件位置: /usr/local/nginx/conf/nginx.con 2.清空  /usr/local/nginx/conf/nginx.con默认的配置文件内容 [[email protected] ~]# > /usr/local/nginx/conf/nginx.conf >:重定向的意思,单独使用,可以把一个文本文档快速清空 3.拷贝一下代码到/usr/local/nginx/conf/nginx.conf文件

Nginx的基本配置:虚拟主机、日志文件、缓存、自动列目录的配置

Nginx配置文件总览 Nginx的配置文件结构 #设置用户 user root; #工作衍生的进程数 (一般=CPU核心数或核心数*2) worker_processes 2; #设置错误文件的存放路径 error_log logs/error.log; #error_log logs/error.log notice; #error_log logs/error.log info; #设置pid的存放路径(pid是控制系统中的重要文件) pid logs/nginx.pid; #设置最大连接

虚拟主机ip配置,nginx.conf文件配置及日志文件切割

今天粗略整理了一下虚拟主机配置,nginx.conf文件的配置,及日志文件的切割,记录如下: nginx虚拟主机配置:1.IP地址配置,2.绑定ip地址和虚拟主机详情:1.ip地址的配置:ifconfig eth0 192.168.0.15 netmast 255.255.255.0虚拟ip及对应server块基本配置:ifconfig eth0:1 192.168.0.180 broadcast 192.168.0.255 netmask 255.255.255.0ifconfig eth0: