Nginx日志文件的配置
Nginx的日志文件,默认在Nginx程序安装目录的logs二级目录下。
与Nginx日志相关的指令有两条
log_format,用来设置日志的记录格式。
Access_log,用来指定日志文件的存放路径、格式和缓存大小。
这两条指令在Nginx配置文件中,可以在http{……}之间,也可以在虚拟主机之间,即server{……}之间。
Log_format指令
用来设置日志文件的记录格式,语法如下
log_format name format[format ……]
其中,name表示定义的格式名称,format,表示定义的格式样式。
Log_format有一个默认的、无须设置的combined日志格式设置,相当于Apache的combined日志格式,如下
log_format combined '$remote_addr - $remote_user [$time_local]'
'"$request" $status $body_bytes_sent'
'"$http_referer" "$http_user_agent"';
也可以自定义日志的记录格式,注意,log_format指令设置的name名称,在Nginx配置文件中,是不能重复的。
如果,将Nginx服务器作为Web服务器,唯一负载均衡设备、Squid、Nginx反向代理之后,就不能获取到客户端的真实IP地址了。
原因,经过反向代理之后,由于在客户端和Web服务器之间,增加了中间层,因此,Web服务器无法直接拿到客户端的IP,通过$remote_addr变量拿到的是反向代理服务器的IP地址。
但是,反向代理服务器在转发请求的http头信息中,可以增加X-Forwarded-For信息,用以记录原有的客户端IP地址和原有客户端请求的服务器地址。
此时,需要用log_format指令来设置日志格式,让日志记录X-Forwarded-For信息中的IP地址,即客户的真实IP。
比如,创建一个名为mylogformat的日志格式,再用$http_x_forwarded_for变量记录用户的X_Forwarded-For IP地址。
log_format mylogformat '$http_x_forwarded - $remote_user [$time_local]'
'"$request" $status $body_bytes_sent'
'"$http_referer" "$http_user_agent"';
参数说明
$remote_addr——用来记录IP地址
$http_x_forwarded_for——用来记录IP地址
$remote_user——用来记录远程客户端用户名称
$time_local——用来记录访问时间与时区
$request——用来记录请求URL与http协议
$status——用来记录请求状态,比如,成功时状态为200,页面找到时状态为404等
$body_bytes_sent——用来记录发送给客户端的文件主体内容大小
$http_referer——用来记录是从哪个页面链接访问过来的
$http_user_agent——用来记录客户端浏览器的相关信息
Access_log指令
指定日志文件存放路径,语法如下
access_log path [format[buffer=size | off]]
参数说明
path——表示日志文件的存放路径。
Format——表示使用log_format指令设置的日志格式的名称。
Buffer=size——表示设置内存缓冲区的大小,比如,可以设置buffer=32k。
如果不记录日志,可以使用如下指令关闭日志记录
access_log off;