自定义nginx访问日志和内置变量使用
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了自定义nginx访问日志和内置变量使用相关的知识,希望对你有一定的参考价值。
自定义nginx访问日志和内置变量使用安装第三方echo模块后查看内置变量
内置变量
1.$args 用户在浏览器中查找的相关参数(uri中?之后的字段)
2.$document_root 站点根目录所在的位置
3.$document_uri 去除url中域名部分后所剩下的目录
4.$host 所访问的主机
5.$http_user_agent 客户端所使用的浏览器
6.$http_cookie 客户端的cookie信息
7.$limit_rate 客户端的下载速率0表示不限制速度
server
server_name www.mylinuxops.com;
location /python
root /data/www;
index index.html;
echo args: $args;
echo document_root: $document_root;
echo document_uri: $document_uri;
echo host: $host;
echo http_user_agent $http_user_agent;
echo http_cookie: $http_cookie;
echo limit_rate: $limit_rate;
[[email protected] ~]# curl www.mylinuxops.com/python?12345
args: 12345
document_root: /data/www
document_uri: /python
host: www.mylinuxops.com
http_user_agent curl/7.29.0
http_cookie:
limit_rate: 0
客户端相关的变量
8$remote_addr 显示客户端地址
9.$remote_port 客户端端口
10.$remote_user 客户端用户一般显示为-,只有认证登录的用户才显示
分别测试登录和非登录
server
server_name www.mylinuxops.com;
location /
root /data/www;
index index.html;
echo remote_addr: $remote_addr;
echo remote_port: $remote_port;
echo remote_user: $remote_user;
location /linux
root /data/www;
index index.html;
echo $host;
auth_basic "login";
auth_basic_user_file /apps/nginx/conf/.htpasswd;
echo remote_addr: $remote_addr;
echo remote_port: $remote_port;
echo remote_user: $remote_user;
[[email protected] ~]# curl www.mylinuxops.com
remote_addr: 172.22.27.10
remote_port: 56608
remote_user:
[[email protected] ~]# curl -u masuri:111111 www.mylinuxops.com
remote_addr: 172.22.27.10
remote_port: 56610
remote_user: masuri
请求报文相关的变量
11.$request_body_file
12.$request_method 请求的方法有
13.$request_filename 请求文件在服务器上的位置
14.$request_uri 请求的uri
server
server_name www.mylinuxops.com;
location /
root /data/www;
index index.html;
echo request_body_file: $request_body_file;
echo request_method: $request_method;
echo request_filename: $request_filename;
echo request_uri: $request_uri;
[[email protected] ~]# curl www.mylinuxops.com/index.html
request_body_file:
request_method: GET
request_filename: /data/www/index.html
request_uri: /index.html
服务器相关的变量
15.$scheme 请求时所时使用的协议
16.$server_protocol 所使用的http协议版本号
17.$server_addr 服务器的IP地址
18.$server_name 服务器名
19.$server_port 服务器所使用的端口
修改配置文件
server
server_name www.mylinuxops.com;
location /
root /data/www;
index index.html;
echo server_protocol: $server_protocol;
echo server_addr: $server_addr;
echo server_name: $server_name;
echo server_port: $server_port;
echo scheme: $scheme;
测试
[[email protected] ~]# curl www.mylinuxops.com
scheme: http
server_protocol: HTTP/1.1
server_addr: 172.22.27.10
server_name: www.mylinuxops.com
server_port: 80
nginx自定义访问日志
访问日志是记录客户端即用户的具体请求内容信息,全局配置模块中的error_log是记录nginx服务器运行时的日志保存路径和日志的等级,因此有着本质的区别,而且Nginx的错误日志一般只有一个,但是访问日志可以再不同server中定义多个,定义一个日志需要使用access_log指定日志的保存路径,使用log_format指定日志的格式,格式中定义要保存的具体日志内容。
系统默认日志
1.错误日志
系统的错误日志在主配置文件的全局配置中开启
error_log logs/error.log;
2.访问日志
系统默认访问日志的格式在主配置文件的http字段中定义,然后在每一个server段中开启访问日志并调用,这样是为了方便日志的管理,确保每个server都有一个独立的访问日志
http
include mime.types;
default_type application/octet-stream;
log_format main ‘$remote_addr - $remote_user [$time_local] "$request" ‘
‘$status $body_bytes_sent "$http_referer" ‘
‘"$http_user_agent" "$http_x_forwarded_for"‘;
在server中开启并调用日志规则
server
server_name www.mylinuxops.com;
access_log /var/logs/nginx/mylinuxops.log main; #开启日志调用日志规则
location /
root /data/www;
index index.html;
开启访问日志时需要注意确保日志存放的目录对于nginx来说是有写权限的否则将无法生成日志
生成存放日志的目录
[[email protected] ~]# mkdir /var/log/nginx
检查配置文件并生效
[[email protected] log]# nginx -t
nginx: the configuration file /apps/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /apps/nginx/conf/nginx.conf test is successful
[[email protected] log]# nginx -s reload
访问站点,查看访问日志
[[email protected] log]# curl www.mylinuxops.com
mylinuxops.com
[[email protected]t log]# cat /var/log/nginx/mylinuxops.log
172.22.27.10 - - [30/May/2019:10:34:27 +0800] "GET / HTTP/1.1" 200 15 "-" "curl/7.29.0" "-"
nginx自定以json格式日志
nginx默认的访问日志记录的内容相对比较单一,默认的格式也不方便后期做日志的统计分析,生产环境中通常将nginx日志转换为json日志,然后配合ELK做日志收集、统计、分析
jion格式日志
修改配置文件写入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"‘;
在server中调用日志格式
server
server_name www.mylinuxops.com;
access_log /var/log/nginx/mylinuxops.log access_json;
location /
root /data/www;
index index.html;
检查配置文件,重读配置文件
[[email protected] log]# nginx -t
nginx: the configuration file /apps/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /apps/nginx/conf/nginx.conf test is successful
[[email protected] log]# nginx -s reload
再次访问后查看日志
[[email protected] log]# curl www.mylinuxops.com
mylinuxops.com
[[email protected] log]# cat /var/log/nginx/mylinuxops.log
172.22.27.10 - - [30/May/2019:10:34:27 +0800] "GET / HTTP/1.1" 200 15 "-" "curl/7.29.0" "-"
"@timestamp":"2019-05-30T11:08:45+08:00",???"host":"172.22.27.10",???"clientip":"172.22.27.10",???"size":15,???"responsetime":0.000,???"upstreamtime":"-",???"upstreamhost":"-",???"http_host":"www.mylinuxops.com",???"uri":"/index.html",???"domain":"www.mylinuxops.com",???"xff":"-",???"referer":"-",???"tcp_xff":"",???"http_user_agent":"curl/7.29.0",???"status":"200" #此为json格式的日志
以上是关于自定义nginx访问日志和内置变量使用的主要内容,如果未能解决你的问题,请参考以下文章