自定义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] 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格式的日志

原文地址:https://blog.51cto.com/11886307/2403947

时间: 2024-10-07 01:08:29

自定义nginx访问日志和内置变量使用的相关文章

nginx内置变量

今天在整理nginx的rewrite规则,发现遇到许多关于nginx内置变量的判断,所以此处将nginx的内置变量温习一遍······ nginx支持的所有内置变量: $arg_name 请求中的的参数名,即"?"后面的arg_name=arg_value形式的arg_name $args 请求中的参数值 $binary_remote_addr 客户端地址的二进制形式, 固定长度为4个字节 $body_bytes_sent 传输给客户端的字节数,响应头不计算在内:这个变量和Apache

nginx内置变量 大全

nginx内置变量 内置变量存放在  ngx_http_core_module 模块中,变量的命名方式和apache 服务器变量是一致的.总而言之,这些变量代表着客户端请求头的内容,例如$http_user_agent, $http_cookie, 等等.下面是nginx支持的所有内置变量: $arg_name请求中的的参数名,即"?"后面的arg_name=arg_value形式的arg_name $args请求中的参数值 $binary_remote_addr客户端地址的二进制形式

Nginx内置变量以及日志格式变量参数详解

Nginx内置变量以及日志格式变量参数详解 $args #请求中的参数值 $query_string #同 $args $arg_NAME #GET请求中NAME的值 $is_args #如果请求中有参数,值为"?",否则为空字符串 $uri #请求中的当前URI(不带请求参数,参数位于$args),可以不同于浏览器传递的$request_uri的值,它可以通过内部重定向,或者使用index指令进行修改,$uri不包含主机名,如"/foo/bar.html". $d

Nginx核心模块内置变量

本文根据Nginx官网整理了Nginx的ngx_http_core_module模块的内置变量,可与Apache做对比参考.随后做了一次测试观察各变量的值,并附上测试结果. 1.变量列表 $arg_name    请求行中参数name的值. $args    请求行中的所有参数. $binary_remote_addr    客户端地址的二进制形式. $body_bytes_sent    发送给客户端的字节数,不包含响应头的内容,与Apache的mod_log_config模块中的%B兼容.

通过lua获取nginx的内置变量,通过这些变量做些逻辑的处理

Nginx提供了很多内置的变量,如: $arg_PARAMETER 这个变量包含在查询字符串时GET请求PARAMETER的值. $args 这个变量等于请求行中的参数. $binary_remote_addr 二进制码形式的客户端地址. $body_bytes_sent 传送页面的字节数 $content_length 请求头中的Content-length字段. $content_type 请求头中的Content-Type字段. $cookie_COOKIE cookie COOKIE的值

nginx的那些内置变量

nginx在配置文件nginx.conf中可以使用很多内置变量,配置如下: location /info { add_header 'Content-Type' 'text/html'; echo "http_user_agent :$http_user_agent <br>"; echo "http_cookie :$http_cookie <br>"; echo "http_user_agent :$http_user_agen

使用正则表达式来截取nginx中的内置变量

nginx 中的内置变量都可以通过 if 指令 + 正则表达式来进行截取,截取之后的结果通过正则表达式的分组来进行引用 比如:从请求中传过来的一个名为 ssl_client_s_dn 的变量,它的值是类似 cn=username这样的 我们想要只留下username ,可以这样: if ( $ssl_client_s_dn ~ (CN=([\S\s]*)) ){                 set  $username $2;  } 其中 $2 是指获取正则表达式匹配结果的第二个分组(也就是

nginx基础学习第二篇:nginx内置变量的使用

ngx_http_core模块提供的内置变量有很多,常见的有 $uri,用来获取当前请求的uri,不含请求参数. $request_uri,用来获取请求最原始的uri,包含请求参数,且未解码. $request,获取请求方法(GET或者POST).$request_uri.HTTP协议版本. $args,获取当前请求的参数串(即请求中问号后面的部分,如果有的话),未解码的原始值.$args变量是可以改变的,利用set指令即可 set $args a=1&b=2.需要注意的是,绝大部分的内置变量都

nginx 内置变量

内置变量 server { listen 80; server_name cpu.enjoy.com; if ( $http_origin ~ http://(.*).enjoy.com){ set $allow_url $http_origin; } #1 location /var { echo $allow_url; echo '[host]=$host' ; echo '[http_HEADER]=$http_HEADER' ; echo '[remote_addr]=$remote_a