配置 Nginx日志管理发布时间:2015/10/10 0:19:00 阅读次数:

  

 

先来看一个实际的配置文件:

user nobody;# 工作进程的属主
 worker_processes 4;# 工作进程数,一般与 CPU 核数等同

 #error_log logs/error.log; 
 #error_log logs/error.log notice; 
 #error_log logs/error.log info; 

 #pid logs/nginx.pid; 

 events { 
 use epoll;#Linux 下性能最好的 event 模式
 worker_connections 2048;# 每个工作进程允许最大的同时连接数
}

 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 off; 
 access_log logs/access.log;# 日志文件名

 sendfile on; 
 #tcp_nopush on; 
 tcp_nodelay on; 

 keepalive_timeout 65; 

include
gzip.conf;

 # 集群中的所有后台服务器的配置信息
 upstream tomcats { 

 server 192.168.0.11:8080 weight=10; 

 server 192.168.0.11:8081 weight=10; 

 server 192.168.0.12:8080 weight=10; 

 server 192.168.0.12:8081 weight=10; 

 server 192.168.0.13:8080 weight=10; 

 server 192.168.0.13:8081 weight=10; 
}

 server { 
 listen 80;#HTTP 的端口
 server_name localhost; 

 charset utf-8; 

 #access_log logs/host.access.log main; 


 location ~ ^/NginxStatus/ { 

 stub_status on; #Nginx 状态监控配置

 access_log off; 

}


 location ~ ^/(WEB-INF)/ { 

 deny all; 

}




 location ~ .(htm|html|asp|php|gif|jpg|jpeg|png|bmp|ico|rar|css|js|

 zip|java|jar|txt|flv|swf|mid|doc|ppt|xls|pdf|txt|mp3|wma)$ { 
 root /opt/webapp; 

 expires 24h; 
}

 location / { 

 proxy_pass http://tomcats;# 反向代理

 include proxy.conf; 
}

 error_page 404 /html/404.html; 

 # redirect server error pages to the static page /50x.html 
#

 error_page 502 503 /html/502.html; 
 error_page 500 504 /50x.html; 
 location = /50x.html { 
 root html; 
}
}
}

nginx 日志相关指令主要有两条,log_format,用来设置日志格式,access_log,用来指定日志文件的存放路径、格式和缓存大小1、log_format 格式 log_format name( 格式名字) 格式样式(即想要得到什么样的日志内容) 默认的示例: log_format main '$remote_addr - $remote_user [$time_local]"$request"' '$status $body_bytes_s ent"$http_referer"' '"$http_user_agent""$http_x_forwarded_for"'注释:$remote_addr 与$http_x_forwarded_for 用以记录客户端的ip地址;$remote_user :用来记录客户端用户名称;$time_local : 用来记录访问时间与时区; $request : 用来记录请求的url与http协议;

$request_uri: /stat.php?id=1585378&web_id=1585378 $uri /stat.php $document_uri: /stat.php $status : 用来记录请求状态;成功是200,$body_bytes_s ent :记录发送给客户端文件主体内容大小;$http_referer :用来记录从那个页面链接访问过来的;$http_user_agent :记录客户毒啊浏览器的相关信息;

通常web服务器放在反向代理的后面,这样就不能获取到客户的IP地址了,通过$remote_add拿到的IP地址是反向代理服务器的iP地址。反向代理服务器在转发请求的http头信息中,可以增加x_forwarded_for信息,用以记录原有客户端的IP地址和原来客户端的请求的服务器地址; log_format mylogformat ' $http_x_forwarded_for- $remote_user [$time_local] ' '"$request" '$status $body_bytes_s ent ' '"$http_referer""$http_user_agent"'; 2、用access_log指令日志文件存放路径; 用了log_format 指令设置了日志格式之后,需要用access_log指令指定日志文件的存放路径;access_log path(存放路径) format (自定义日志名称)示例: #access_log logs/access.log main;我们用log_format 定义了一个mylogformat的日志 我们可以写成这样access_log logs/access.log mylogformat ;

如果不想启用日志 :access_log off ;

在定义日志目录中要注意的是,

1、nginx进程设置的用户和组必须有对该路径 创建文件的权限,假设nginx的usr指令设置的用户名 和用户组都是www,而logs 目录的用户名和组是root,那么日志文件将无法被创建;

2、一般情况下,如果nginx.conf配置文件里的http里面没设置access_log off;默认是会把所有访问日志输出到/var/log/nginx目录下面,现在要把不同网站的日志区分开来,所以添加了access_log off。

按照之前很多网上的配置方法是在各个虚拟主机配置文件的server段里添加日志格式和日志输出路径,如下

log_format access '$remote_addr - $remote_user [$time_local]"$request"'
'$status $body_bytes_sent"$http_referer"'
'"$http_user_agent"$http_x_forwarded_for';
access_log /home/wwwlogs/ddhow.com.log access;
error_log /home/wwwlogs/ddhow.com-error.log;