日志模块
ngx_http_log_module
实例 1 压缩日志
ngx_http_log_module
实例 1 压缩日志
log_format gzip '$remote_addr - $remote_user [$time_local] '
: '"$request" $status $bytes_sent '
: '"$http_referer" "$http_user_agent" "$gzip_ratio"';
access_log /spool/logs/nginx-access.log gzip buffer=32k;
这个是对日志进行压缩,但是首相要开启gzip的压缩功能。
实例 2 普通日志
server {
root /spool/vhost/data/$host;
access_log /spool/vhost/logs/$host;
针对单个站点进行的日志配置。
server {
root /spool/vhost/data/$host;
access_log /spool/vhost/logs/$host;
针对单个站点进行的日志配置。
实例 3 combined日志
log_format combined '$remote_addr - $remote_user [$time_local] '
'"$request" $status $body_bytes_sent '
'"$http_referer" "$http_user_agent"';
可以向apache那样产生日志。
log_format combined '$remote_addr - $remote_user [$time_local] '
'"$request" $status $body_bytes_sent '
'"$http_referer" "$http_user_agent"';
可以向apache那样产生日志。
实例 4 不知道
open_log_file_cache max=1000 inactive=20s valid=1m min_uses=2;
从字面理解好性可以打开缓存日志,但是官方是俄文的,实在看不懂,这个日志格式可以研究一下。
open_log_file_cache max=1000 inactive=20s valid=1m min_uses=2;
从字面理解好性可以打开缓存日志,但是官方是俄文的,实在看不懂,这个日志格式可以研究一下。
虽然nginx非常好,但是Nginx目前就还不支持通过pipe输出log,所以就不支持利用cronolog来按时间进行日志截断回滚。
如果要截断日志,每天来分析,就要通过第三方的方法来做。
下面提供一种替代解决方案,来达到日志回滚的效果:
如果要截断日志,每天来分析,就要通过第三方的方法来做。
下面提供一种替代解决方案,来达到日志回滚的效果:
#!/bin/sh
log_dir=”/backup/log/nginx/”
yesterday=`date +%Y%m%d`
lastday =`date +%Y%m%d -d ‘-1 month’`
/bin/rm ${log_dir}/access.log.${lastday}
/bin/rm ${log_dir}/error.log.${lastday}
/bin/mv ${log_dir}/access.log ${log_dir}/access.log.${yesterday}
/bin/mv ${log_dir}/error.log ${log_dir}/error.log.${yesterday}
kill -USR1 `cat /usr/local/nginx/nginx.pid`
/bin/gzip ${log_dir}/access.log.${yesterday} &
/bin/gzip ${log_dir}/error.log.${yesterday} &
log_dir=”/backup/log/nginx/”
yesterday=`date +%Y%m%d`
lastday =`date +%Y%m%d -d ‘-1 month’`
/bin/rm ${log_dir}/access.log.${lastday}
/bin/rm ${log_dir}/error.log.${lastday}
/bin/mv ${log_dir}/access.log ${log_dir}/access.log.${yesterday}
/bin/mv ${log_dir}/error.log ${log_dir}/error.log.${yesterday}
kill -USR1 `cat /usr/local/nginx/nginx.pid`
/bin/gzip ${log_dir}/access.log.${yesterday} &
/bin/gzip ${log_dir}/error.log.${yesterday} &
然后将该脚本保存在/usr/local/bin/cron.daily目录里,或者在crontab里每日0点时运行。
我规定了日志格式为access.log.yyyymmdd,如果日志文件够大,可以采用压缩日志gzip.
我规定了日志格式为access.log.yyyymmdd,如果日志文件够大,可以采用压缩日志gzip.
#这里使用了通信
说到通信,我再介绍一下linux和nginx的通信机制.
Nginx 支持下表中的信号:
信号名 作用描述
TERM, INT 快速关闭程序,中止当前正在处理的请求
QUIT 处理完当前请求后,关闭程序
HUP 重新加载配置,并开启新的工作进程,关闭就的进程,此操作不会中断请求
USR1 重新打开日志文件,用于切换日志,例如每天生成一个新的日志文件
USR2 平滑升级可执行程序
WINCH 从容关闭工作进程
信号名 作用描述
TERM, INT 快速关闭程序,中止当前正在处理的请求
QUIT 处理完当前请求后,关闭程序
HUP 重新加载配置,并开启新的工作进程,关闭就的进程,此操作不会中断请求
USR1 重新打开日志文件,用于切换日志,例如每天生成一个新的日志文件
USR2 平滑升级可执行程序
WINCH 从容关闭工作进程
有两种方式来通过这些信号去控制 Nginx,第一是通过 logs 目录下的 nginx.pid 查看当前运行的 Nginx 的进程 ID,通过 kill - XXX 来控制 Nginx,其中 XXX 就是上表中列出的信号名。如果您的系统中只有一个 Nginx 进程,那您也可以通过 killall 命令来完成,例如运行 killall - s HUP nginx 来让 Nginx 重新加载配置。