内置变量
$remote_addr;存放了客户端的地址,注意是客户端的公网IP,也就是一家人访问一个网站,则会显示为路由器的公网IP。
$args;变量中存放了URL中的指令
[root@localhost conf.d]# cat pc.conf
server {listen 80;server_name www.fxq.com;location / {root /data/nginx/html/pc;index index.html;}location /m78 {default_type text/html;echo $remote_addr;echo $args;}
}
我这边电脑与服务器之间的网段做了路由,显示了网关
$document_root; 保存了针对当前资源的请求的系统根目录
$document_uri; 保存了当前请求中不包含指令的URI
[root@localhost conf.d]# cat pc.conf
server {listen 80;server_name www.fxq.com;location / {root /data/nginx/html/pc;index index.html;}location /m78 {root /data/nginx/html/pc;default_type text/html;echo $document_root; echo $document_uri;}
}
$host; 存放了请求的host名称
$http_user_agent; 客户端浏览器的详细信息
$http_cookie;客户端的cookie信息。
[root@localhost conf.d]# cat pc.conf
server {listen 80;server_name www.fxq.com;location / {root /data/nginx/html/pc;index index.html;}location /m78 {root /data/nginx/html/pc;default_type text/html;echo $host;echo $http_user_agent;echo $http_cookie;} }
limit_rate 10240;
echo $limit_rate;如果nginx服务器使用limit_rate配置了显示网络速率,则会显示,如果没有设置, 则显示0
$remote_user; 已经过Auth Basic Module验证的用户名。
$request_body_file;做反向代理时发给后端服务器的本地资源的名称。
$request_method;请求资源的方式,GET/PUT/DELETE等
$request_filename;当前请求的资源文件的路径名称,由root或alias指令与URI请求生成的文件绝对路径
$request_uri;包含请求参数的原始URI,不包含主机名
$scheme;请求的协议,如ftp,https,http等;
$server_protocol;保存了客户端请求资源使用的协议的版本,如HTTP/1.0,HTTP/1.1,HTTP/2.0等
$server_addr;保存了服务器的IP地址;
$server_name;请求的服务器的主机名。
$server_port;请求的服务器的端口号。
自定义变量
使用set自定义变量
[root@localhost conf.d]# cat pc.conf
server {listen 80;server_name www.fxq.com;location / {root /data/nginx/html/pc;index index.html;}location /m78 {root /data/nginx/html/pc;default_type text/html;set $name fxq;echo $name;
} }
日志格式
默认格式
自定义json格式
log_format access_json '{"@timestamp":"$time_iso8601",''"host":"$server_addr",''"clientip":"$remote_addr",''"size":$body_bytes_sent,''"responsetime":$request_time,''"upstreamtime":"$upstream_response_time",''"upstreamhost":"$upstream_addr",''"http_host":"$host",''"uri":"$uri",''"domain":"$host",''"xff":"$http_x_forwarded_for",''"referer":"$http_referer",''"tcp_xff":"$proxy_protocol_addr",''"http_user_agent":"$http_user_agent",''"status":"$status"}';access_log logs/access.log access_json;
python日志收集
#!/usr/bin/env python
#coding: utf-8
status_200=[]
status_404=[]
with open("/apps/nginx/logs/access.log") as f:for line in f.readlines():line = eval(line)if line.get("status") == "200":status_200.append(line.get)elif line.get("status") == "404":status_404.append(line.get)else:print("状态码 ERROR")
f.close()
print "状态码200的有--:",len(status_200)
print "状态码404的有--:",len(status_404)