Module ngx_http_log_module

nginx 日志相关指令主要有两条,

一条是log_format,用来设置日志格式,
另外一条是access_log,用来指定日志文件的存放路径、格式和缓存大小。
通俗的理解就是先用log_format来定义自己想用的日志格式,然后在用access_log定义日志时再把定义的log_format名称 跟在后面;

1、log_format 格式

log_format name(格式名字) string(格式样式即想要得到什么样的日志内容)

示例:

log_format access '$remote_addr - $remote_user [$time_local] "$request" "$request_time" $status $body_bytes_sent "$http_referer" "$http_user_agent" $http_x_forwarded_for';

注释:
$remote_addr:与 $http_x_forwarded_for 用以记录客户端的ip地址;
$remote_user:用来记录客户端用户名称;
$time_local:用来记录访问时间与时区;
$request:用来记录请求的http的方式与url;
$request_time:用来记录请求时间;
$status:用来记录请求状态;成功是200,
$body_bytes_sent:记录发送给客户端文件主体内容大小;
$http_referer:用来记录从那个页面链接访问过来的;
$http_user_agent:记录客户毒啊浏览器的相关信息。

通常web服务器放在反向代理的后面,这样就不能获取到客户的IP地址了,通过$remote_add拿到的IP地址是反向代理服务器的iP地址。

反向代理服务器在转发请求的http头信息中,可以增加x_forwarded_for信息,用来记录客户端IP地址和客户端请求的服务器地址

2、用access_log指令日志文件存放路径;
用了log_format 指令设置了日志格式之后,需要用access_log指令指定日志文件的存放路径;
access_log path(存放路径) access(自定义日志名称,和log_format设置的名称一致)

示例:
access_log logs/access.log access;

注意:
在定义日志目录中要注意的是,nginx进程设置的用户和组必须有对该路径创建文件的权限,
假设nginx的usr指令设置的用户名 和用户组都是www,而logs 目录的用户名和组是root,那么日志文件将无法被创建。

用nginx做前端代理后,我们发现 HTTP_X_FORWARDED_FOR 无法获取到客户端真实的IP地址了。

原因 nginx 默认并不会增加 X_FORWARDED_FOR 头信息,我们给他加上就好了。简单配置如下:

location /
{
proxy_pass http://www.xxx.com;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; //别忘了这一句
proxy_set_header HTTP_X_FORWARDED_FOR $remote_addr; //或是加上这一句
proxy_redirect default;
}

重启nginx加载新配置后,就可以获取客户端真实的IP地址了

3.日志切割:
通过如下方式达到日志切割:

vim /opt/cut_nginx.sh
#!/bin/bash
#切割日志
datetime=$(date -d "-1 day" "+%Y%m%d")
log_path="/usr/local/nginx/logs"
pid_path="/usr/local/nginx/logs/nginx.pid"
[ -d $log_path/backup ] || mkdir -p $log_path/backup
if [ -f $pid_path ]
then
mv $log_path/access.log $log_path/backup/access.log-$datetime
kill -USR1 $(cat $pid_path)
find $log_path/backup -mtime + | xargs rm -f \\mtime :文件被修改时间 atime:访问时间(文件中的数据库最后被访问的时间) ctime:改变时间(文件的元数据发生变化。比如权限,所有者等)
else
echo "Error,Nginx is not working!" | tee -a /var/log/messages
fi

chmod +x /opt/cut_nginx.sh

crontab -e 设置定时任务

    *  *  *     /opt/cut_nginx.sh

[root@localhost ~]# /opt/cut_nginx_log.sh

[root@localhost ~]# ls /usr/local/nginx/logs/backup/

access.log-20161117

[root@localhost ~]# killall -9 nginx

[root@localhost ~]# /opt/cut_nginx_log.sh

Error,Nginx is not working!

[root@localhost ~]# tail -1 /var/log/messages

Error,Nginx is not working!

最新文章

  1. 【GOF23设计模式】工厂模式
  2. [小工具]CSS内嵌样式自动提取器
  3. 栈的C++实现(数组)——创建-push-pop-top-清空栈-处理栈
  4. velocity freemarker比较
  5. Openstack Quantum project 更名为 Neuron
  6. [转载]Spring Web MVC Framework
  7. ASP缓存类收集
  8. Windows 如何在cmd命令行中查看、修改、删除与添加环境变量
  9. 在 VS2013的ASPNET站点开发中用 xheditor v1.1.13 作为HTML编辑器
  10. Linux 主要目录速查表
  11. 前端html1.
  12. jquery $.trim()去除字符串空格
  13. js混淆、eval解密
  14. mission 01
  15. [转帖]盖国强:Oracle 路线图
  16. 清理tomcat服务器缓存
  17. benthos stream nats 集成试用
  18. USB协议规范文档简介
  19. etl业务验证方法1
  20. 在macro中怎么接着使用一些库?(遇到的例子:current_user)

热门文章

  1. Go最火的Gin框架简单入门
  2. 在Android Studio配置google protobuf
  3. xpath中normalize-space的用法【转载】
  4. .net测试篇之测试神器Autofixture Generator使用与自定义builder
  5. vue入门:用户管理demo
  6. Istio 太复杂?KubeSphere基于Ingress-Nginx实现灰度发布
  7. MySQL的count(*)的优化,获取千万级数据表的总行数[转]
  8. 【CF #541 D】 Gourmet choice
  9. 2019杭电多校 hdu6662 Acesrc and Travel (树形dp
  10. CF1028C Rectangles 思维