Nginx 访问日志
Nginx 的文件格式存在于主配置文件中.
/usr/local/nginx/conf/nginx.conf
然后搜索 log_format 找到他的配置文件
这样我们就可以进行日志的格式配置了.
我们常用如下配置.
$remote_addr
客户端 IP(公网 IP)
$http_x_forwarded_for
代理服务器的 IP
$time_local
服务器本地时间
$host
访问主机名 (域名)
$request_uri
访问的 url 地址
$status
状态码
- $http_referer
- referer
- $http_user_agent
- user_agent
除了在主配置文件 nginx.conf 里定义日志格式外, 还需要在虚拟主机配置文件中增加.
我们用 access_log 来定义他的访问日志路径在哪里.
我们用 test.com.conf 来举例子. 我们在 vhost 目录下打开 test.com.conf
然后输入 access_log /tmp/test.com.log aming;
这里我们需要注意的是我们不要把这行配置放到 if 的大括号中, 而是要放到 server 的大括号中.
然后我我们进行语法检验和重新载入
- /usr/local/nginx/sbin/nginx -t
- /usr/local/nginx/sbin/nginx -s reload
然后我们访问以下我们定义的 test2.com,test3.com,test4.com, 然后再次访问 cat /tmp/test.com.log. 这样日志中就出现了我们刚才访问的日志了.
- 127.0.0.1 - [25/Apr/2018:20:45:41 +0800] test2.com "/admin/index.html/kldfjsaldjflk" 301 "-" "curl/7.29.0"
- 127.0.0.1 - [25/Apr/2018:20:46:32 +0800] test3.com "/admin/index.html/kldfjsaldjflk" 301 "-" "curl/7.29.0"
- 127.0.0.1 - [25/Apr/2018:20:46:37 +0800] test2.com "/admin/index.html/kldfjsaldjflk" 301 "-" "curl/7.29.0"
Nginx 日志切割
首先我们创建一个 shell 脚本, 以后我么可以将脚本放到 /usr/local/sbin 下.
vim /usr/local/sbin/nginx_logrotate.sh
然后输入一下内容
- #! /bin/bash
- d=
- date -d "-1 day" +%Y%m%d
- (生成昨天的日期, 格式为年 - 月 - 日)
- logdir="/data/logs"
- nginx_pid="/usr/local/nginx/logs/nginx.pid" (是为了执行最后一条命令, pid 的路径一定要写对)
- cd $logdir (进入到日志目录下)
- for log in ls *.log (for 循环)
- do
- mv $log $log-$d (然后将日志改名字)
- done
- /bin/kill -HUP cat $nginx_pid (从新加载, 生成新的 log)
然后我们执行一下脚本, 其中 - x 是显示执行过程, sh 是执行脚本
- sh -x /usr/local/sbin/nginx_logrotate.sh
- ++ date -d '-1 day' +%Y-%m-%d
- d=2018-04-24
- logdir=/tmp/
- nginx_pid=/usr/local/nginx/logs/nginx.pid
- cd /tmp/
- ++ ls test.com.log
- for log in 'ls *.log'
- mv test.com.logtest.com.log-2018-04-24
- ++ cat /usr/local/nginx/logs/nginx.pid
- /bin/kill -HUP 1387
然后查看一下 tmp 目录, 发现多了两个文件
- test.com.log-2018-04-24
- test.com.log
这就是日志切割, 以后每天都可以生成.
每天生成机会占用磁盘空间, 我们可以用 find 命令将过去没用的日志删除.
find /tmp/ -name .log- -type f -mtime +30 |xargs rm
然后我么需要做一个计划任务, 每天 0 点执行.
crontab -e
然后在里面, 输入 0 0 */bin/bash /usr/local/sbin/nginx_logrotate.sh
这样就可以每天晚上 0 点执行日志切割脚本了.
静态文件不记录日志和过期时间
网站上有很多的图片等静态文件, 这个量会很大, 产生的日志也会占用大量的空间, 所以我们可以将日志设置为不记录日志和过期时间.
首先编辑 nginx.com.conf 这个配置文件
然后加入以下内容
- location ~ ..(gif|jpg|jpeg|png|bmp|swf)$
- {
- expires 7d;
- access_log off;
- }
- location ~ ..(js|CSS)$
- {
- expires 12h;
- access_log off;
- }
其中 expires 为过期时间.
然后保存退出, 检查语法是否错误和重新加载.
来源: http://www.bubuko.com/infodetail-2575187.html