前言
如果想统计网站的访问来源信息,可以用 php 获取信息,记录到数据库的形式,也可以直接使用 nginx 提供的访问日志,来记录网站的访问详情,管理员可以通过分析 nginx 的访问日志,来分析用户的访问来源,访问行为详情,网站页面访问热度等。此外,nginx 自身也有错误日志,方便运维人员调试 nginx。对于记录日志的行为,如果每次进行磁盘操作,将会较多的耗费资源,基于这个情况可以开启 nginx 日志缓冲区,缓冲区满或者定时写入的时间到了,再一次写入日志。
访问日志
nginx 在处理请求后立即在访问日志中写入有关客户端请求的信息。默认情况下,访问日志位 logs/access.log 中,信息以预定义的组合格式写入日志。
想要精确记录访问信息,就需要自定义一个更加完整的访问日志格式,如下所示:
http { log_format geoproxy '[$time_local] $remote_addr ' '$realip_remote_addr $remote_user ' '$request_method $server_protocol ' '$scheme $server_name $uri $status ' '$request_time $body_bytes_sent ' '$geoip_city_country_code3 $geoip_region ' '"$geoip_city" $http_x_forwarded_for ' '$upstream_status $upstream_response_time ' '"$http_referer" "$http_user_agent"'; ...}
这个日志配置被命名为 geoproxy,它使用许多 nginx 变量来演示 nginx 日志记录功能。详细讲解配置选项中各个变量的具体含义:
当用户发起请求时,会记录服务器时间 $time_local , $remote_user 值为通过基本授权的用户名称;
用于 nginx 处理 geoip_proxy 和 realip_header 指令的打开连接的 IP 地址和客户端 IP 地址;
之后记录 HTTP 请求方法 $request_method 、协议 $server_protocol 和 HTTP 方法 $scheme:http 或 https ;
当然还有服务器名称 $server_name 、请求的 URI 和响应状态码;
除基本信息外,还有一些统计的结果数据:包括请求处理的毫秒级时间 $request_time 、服务器响应的数据块大小 $body_bytes_sent ;
此外,客户端所在国家 $geoip_city_country_code3 、地区 $geoip_region 和城市信息 $geoip_city 也被记录在内;
变量 $http_x_forwarded_for 用于记录由其它代理服务器发起的请求的 X-Forwarded-For 头消息;
upstream 模块中一些数据也被记录到日志里:被代理服务器的响应状态码 $upstream_status 、建立链接和从上游服务器接收响应主体最后一个字节的时间 $upstream_response_time 、 建立和上游服务器的链接时间 $upstream_connect_time 、建立链接和从上游响应头的第一个字节的时间 $upstream_header_time 。
请求来源 $http_referer 和用户代理 $http_user_agent 也可以被记录在日志里;
nginx 的日志记录功能非常强大和灵活的,需要注意的是: 用于定义日志格式的 log_format 指令仅适用于 http 块级指令内,所有时间值均以毫秒为单位,以毫秒分辨率进行测量。 。
新闻热点
疑难解答