一. nginx.conf中 http 加入如下配置linux
access_log on; log_format main '$remote_addr - [$time_local] ' '$upstream_addr $request_time $upstream_response_time ' '$http_host $request' '"$status" $body_bytes_sent "$http_user_agent"'; access_log /data/nginx_log/access.log main;
$remote_addr, $http_x_forwarded_for 记录客户端IP地址nginx
二.shell
nginx的日志文件没有rotate功能。编写天天生成一个日志,咱们能够写一个nginx日志切割脚原本自动切割日志文件。浏览器
第一步就是重命名日志文件,不用担忧重命名后nginx找不到日志文件而丢失日志。在你未从新打开原名字的日志文件前,nginx仍是会向你重命名的文件写日志,Linux是靠文件描述符而不是文件名定位文件。bash
第二步向nginx主进程发送USR1信号。nginx主进程接到信号后会从配置文件中读取日志文件名称,从新打开日志文件(以配置文件中的日志名称命名),并以工做进程的用户做为日志文件的全部者。从新打开日志文件后,nginx主进程会关闭重名的日志文件并通知工做进程使用新打开的日志文件。工做进程马上打开新的日志文件并关闭重名名的日志文件。而后你就能够处理旧的日志文件了。[或者重启nginx服务]。spa
nginx日志按每分钟自动切割脚本以下:.net
新建shell脚本:vi/usr/local/software/nginx/nginx_log.sh日志
#!/bin/bash #设置日志文件存放目录 LOG_HOME="/usr/local/software/nginx/logs/" #备分文件名称 LOG_PATH_BAK="$(date -d yesterday +%Y%m%d%H%M)".abc.access.log #重命名日志文件 mv ${LOG_HOME}/abc.access.log ${LOG_HOME}/${LOG_PATH_BAK}.log #向nginx主进程发信号从新打开日志 kill -USR1 `cat /usr/local/software/nginx/logs/nginx.pid`天天凌晨执行以上脚本