Nginx高性能Web服务器:Nginx的基本配置与优化(第三章)

Nginx (3.7万) 2020-08-24 14:53:02

3、用log_format指令设置日志格式

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_for - $remote_user [$time_local] '
    '"$request" $status $body_bytes_sent '
    '"$http_referer" "http_user_agent"'
$remote_addr$http_x_forwarded_for用于记录IP地址
$remote_user用于记录远程客户端用户名称;
$request用于记录请求URLHTTP协议;
$status用于记录请求状态,例如成功时状态为200,页面找到时状态为404
$body_bytes_sent用于记录发送给客户端的文件主体内容大小;
$http_referer用于记录是从哪个页面链接访问过来的;
$http_user_agent用于记录客户端浏览器的相关信息
$time_local用于记录访问时间与时区。
THE END

Leave a Reply