apache与nginx日志文件详解


**apache
默认装的apache,它的日志文件放在 /usr/local/apache/logs。access.log
cat /usr/local/apache/logs。access.log
示例:
192.168.4.228 - - [27/Sep/2018:23:15:59 +0800] "GET / HTTP/1.1" 304 0 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36" "-"

 192.168.4.228  远程主机的地址 (用nslookup工具查找DNS可以找出主机名) 
======================
- 记录浏览者唯一标识符
=====================
- 记录浏览者进行身份验证时提供的名字
====================================================
[27/Sep/2018:23:15:59 +0800]  代表2018年9月27号23点15分59秒   +0800代表服务器所处时区位于UTC之后的8小时
===============================================================================================
"GET / HTTP/1.1"   算是比较重要的一个信息。 格式为"METHOD RESOURCE PROTOCOL"即"方法 资源 协议"。
请求的方法(常见的还有POST,HEAD ), / 代表浏览者访问网页或根, HTTP/1.1 代表Web客户使用的版本
=============================================================================================
304   状态码 403以上为错误,一下逻辑上不算错误
==============================================
0      代表向客户发送了多少字节数(总的量),可以看出传输是否被打断,以及服务器在一段时间内发送了多少数据(一天一周,月)
=========================================================================================================
"-"  代表客户提出请求时他所在的目录或者URL
=========================================

appache的主程序httpd的配置文件 vim /etc/httpd/conf/httpd.conf 中与设置日志相关的有两个
一个是LogFormat和CustonLog
LogFile是定义日志排列格式,并给这个排列指一个名字
CustomLog 设置日志文件用什么格式 比如 access.log

比如:LogFormat "%h %l %u %t \"%r\" %>s %b" common
名字是common 的日志 ,格式内容有 
远程主机,远程登录名字,远程用户,请求时间,请求的第一 行代码,请求状态,以及发送的字节数

-----------------------------------------------------

格式的含义如下:
%...a: 远程IP地址
%...A: 本地IP地址
%...B: 已发送的字节数,不包含HTTP头
%...b: CLF格式的已发送字节数量,不包含HTTP头。例如当没有发送数据时,写入‘-’而不是0。
%...{FOOBAR}e: 环境变量FOOBAR的内容
%...f: 文件名字
%...h: 远程主机
%...H 请求的协议
%...{Foobar}i: Foobar的内容,发送给服务器的请求的标头行。
%...l: 远程登录名字(来自identd,如提供的话)
%...m 请求的方法
%...{Foobar}n: 来自另外一个模块的注解“Foobar”的内容
%...{Foobar}o: Foobar的内容,应答的标头行
%...p: 服务器响应请求时使用的端口
%...P: 响应请求的子进程ID。
%...q 查询字符串(如果存在查询字符串,则包含“?”后面的部分;否则,它是一个空字符串。)
%...r: 请求的第一行
%...s: 状态。对于进行内部重定向的请求,这是指*原来*请求 的状态。如果用%...>s,则是指后来的请求。
%...t: 以公共日志时间格式表示的时间(或称为标准英文格式)
%...{format}t: 以指定格式format表示的时间
%...T: 为响应请求而耗费的时间,以秒计
%...u: 远程用户(来自auth;如果返回状态(%s)是401则可能是伪造的)
%...U: 用户所请求的URL路径
%...v: 响应请求的服务器的ServerName
%...V: 依照UseCanonicalName设置得到的服务器名字

注:
“...”表示自定义添加的条件,比如你价格状态码或多个,那么只有请求返回的状态是你自定义的内容状态码时才会记录成日志
如: %404{Referer}i BrokenLinks


---------------------


 
 
 
**nginx日志
在nginx配置文件里
vim /usr/local/nginx/conf/nginx.conf的日志格式主要与log_format和access_log搭边(自定义也是这两条)

***
log_format 用来设置日志的格式, log_format具体格式:log_format 格式名 '日志格式样式'(注意要用单引号括起来。引号里可以有多个日志格式参数)

例如: log_format combined '$remote_addr-$remote_user [$time_local]'       combined为格式名   后面的为日志格式样式 

想自定义nginx日志格式直接在配置文件加变量即可 !

nginx是怎么实现以日志的形式记录客户端的IP的?? 现在可以在ngixn主配置中的日志格式log_format中的$remote_addr变量,它虽然是可以拿到客户ip,但如果是有反向代理在中间的话它只能拿到反响代理服务器的ip,而拿不到客户服务器的真实ip!!! 所以这时候需要X-Forwarded-For ,当客户端发送请求给我们服务器的时候,反向代理服务器会转发客户端的HTTP头信息,在这个过程中,方向代理服务器会记录客户端的真实ip和客户端所请求服务器的ip,每记录一次它都会把信息存在X-Forwarded-For中。具体 格式如下:
X-Forwarded-For:client, proxy1, proxy2 (假设客户端要通过多个代理服务器才能把请求发给服务器)
当client请求发给proxy1时候,客户端的ip以及所请求的服务器ip会记录在X-Forwarded-For里,然后proxy1会转发client的ip给porxy2,这个过程的ip也会存在XFF里面(追加的形式)。

首先 $remote_addr变量拿到的是反向代理服务器的IP地址,反向代理服务器在转发请求的HTTP头信息中,可以增加X-Forwarded-For信息,所以用日志记录X-Forearded-For信息中的客户端IP地址就是真实地址!!!
配置文件书写格式:'$http_x_forwarded_for_$remote_user [$time_local]' 不仅仅取到了客户ip地址,还给它显示名字已经客户端的时间时区。

    log_format  main  '$remote_addr  $remote_user [$time_local] "$request" '             #默认的日志格式
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for_$remote_user [$time_local]"';

    access_log  /data/logs/access.log  main;    #开启访问日志功能用来指定日志文件的存放路径、格式和缓存大小                                        
$remote_addr      用于记录IP地址
$remote_user      用于记录远程客户端用户名称;
$time_local       用于记录访问时间与时区;
$request          用于记录请求URL与HTTP协议;
$status           用于记录请求状态,例如成功时状态为200,页面找不到时状态为404;
$body_bytes_sent  用于记录发送客户端的文件主体内容大小;
$http_referer     用于记录是从哪个页面链接访问过来的;
$http_user_agent  用于记录客户浏览器的相关信息。    
    
    
***
 access_log  指定日志路径,缓存大小和日志文件名
如:    access_log  /data/logs/access.log  main;


192.168.4.228 - - [27/Sep/2018:23:15:59 +0800] "GET / HTTP/1.1" 304 0 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36" "-"    
    
    
客户端地址、服务器地址、服务器主机名、访问时间和时区、请求方式、请求协议、状态码、文件大小、浏览器信息

    
    
    
    
**
nginx变量如下    
    
变量                      说明                                         示例
$remote_addr             客户端地址                                    211.28.65.253
$remote_user             客户端用户名称                                --
$time_local              访问时间和时区                                18/Jul/2012:17:00:01 +0800
$request                 请求的URI和HTTP协议                           "GET /article-10000.html HTTP/1.1"
$http_host               请求地址,即浏览器中你输入的地址(IP或域名)     www.wang.com 192.168.100.100
$status                  HTTP请求状态                                  200
$upstream_status         upstream状态                                  200
$body_bytes_sent         发送给客户端文件内容大小                        1547
$http_referer            url跳转来源                                   https://www.baidu.com/
$http_user_agent         用户终端浏览器等信息                           "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; SV1; GTB7.0; .NET4.0C;
$ssl_protocol            SSL协议版本                                   TLSv1
$ssl_cipher              交换数据中的算法                               RC4-SHA
$upstream_addr           后台upstream的地址,即真正提供服务的主机地址     10.10.10.100:80
$request_time            整个请求的总时间                               0.205
$upstream_response_time  请求过程中,upstream响应时间                    0.002

你可能感兴趣的:(Nginx)