0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

nginx日志配置方法

马哥Linux运维 来源:博客园biglittleant 2024-10-24 17:43 次阅读

nginx access日志配置

access_log日志配置

access_log用来定义日志级别,日志位置。语法如下:
日志级别:debug > info > notice > warn > error > crit > alert > emerg

语法格式:access_log path [format [buffer=size] [gzip[=level]] [flush=time] [if=condition]];
                     access_log off;
默认值   :access_log logs/access.log combined;
作用域   :http, server, location, if in location, limit_except

实例一:

access_log /spool/logs/nginx-access.log compression buffer=32k;

log_format 定义日志格式

语法格式:log_format name [escape=default|json] string ...;
默认值    :log_format combined "...";
作用域    :http

实例一:

log_format compression '$remote_addr - $remote_user [$time_local] '
                       '"$request" $status $bytes_sent '
                       '"$http_referer" "$http_user_agent" "$gzip_ratio"';

access_log /spool/logs/nginx-access.log compression buffer=32k;

常见的日志变量

$remote_addr,$http_x_forwarded_for记录客户端IP地址

$remote_user记录客户端用户名称

$request记录请求的URL和HTTP协议(GET,POST,DEL,等)

$status记录请求状态

$body_bytes_sent发送给客户端的字节数,不包括响应头的大小;该变量与Apache模块mod_log_config里的“%B”参数兼容。

$bytes_sent发送给客户端的总字节数。

$connection连接的序列号。

$connection_requests当前通过一个连接获得的请求数量。

$msec日志写入时间。单位为秒,精度是毫秒。

$pipe如果请求是通过HTTP流水线(pipelined)发送,pipe值为“p”,否则为“.”。

$http_referer记录从哪个页面链接访问过来的

$http_user_agent记录客户端浏览器相关信息

$request_length请求的长度(包括请求行,请求头和请求正文)。

$request_time请求处理时间,单位为秒,精度毫秒;从读入客户端的第一个字节开始,直到把最后一个字符发送给客户端后进行日志写入为止。

$time_iso8601 ISO8601标准格式下的本地时间。

$time_local通用日志格式下的本地时间。

open_log_file_cache

使用open_log_file_cache来设置日志文件缓存(默认是off)。

max:设置缓存中的最大文件描述符数量,如果缓存被占满,采用LRU算法将描述符关闭。

inactive:设置存活时间,默认是10s

min_uses:设置在inactive时间段内,日志文件最少使用多少次后,该日志文件描述符记入缓存中,默认是1次

valid:设置检查频率,默认60s

off:禁用缓存

语法格式:open_log_file_cache max=N [inactive=time] [min_uses=N] [valid=time];
                     open_log_file_cache off;
默认值: open_log_file_cache off;
作用域: http, server, location

实例一

open_log_file_cache max=1000 inactive=20s valid=1m min_uses=2;

nginx日志调试技巧

设置 Nginx 仅记录来自于你的 IP 的错误

当你设置日志级别成 debug,如果你在调试一个在线的高流量网站的话,你的错误日志可能会记录每个请求的很多消息,这样会变得毫无意义。

在events{...}中配置如下内容,可以使 Nginx 记录仅仅来自于你的 IP 的错误日志。

events {
        debug_connection 1.2.3.4;
}

调试 nginx rewrite 规则

调试rewrite规则时,如果规则写错只会看见一个404页面,可以在配置文件中开启nginx rewrite日志,进行调试。

server {
        error_log    /var/logs/nginx/example.com.error.log;
        rewrite_log on;
}

rewrite_log on;开启后,它将发送所有的 rewrite 相关的日志信息到 error_log 文件中,使用 [notice] 级别。随后就可以在error_log 查看rewrite信息了。

使用location记录指定URL的日志

server {
        error_log    /var/logs/nginx/example.com.error.log;
        location /static/ { 
        error_log /var/logs/nginx/static-error.log debug; 
    }         
}

配置以上配置后,/static/ 相关的日志会被单独记录在static-error.log文件中。

nginx日志共三个参数
access_log: 定义日志的路径及格式。
log_format: 定义日志的模板。
open_log_file_cache: 定义日志文件缓存。

proxy_set_header X-Forwarded-For :如果后端Web服务器上的程序需要获取用户IP,从该Header头获取。proxy_set_header X-Forwarded-For $remote_addr;

常用例子

main格式

log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"'
                       '$upstream_addr $upstream_response_time $request_time ';
access_log  logs/access.log  main;

json格式

log_format logstash_json '{"@timestamp":"$time_iso8601",'
       '"host": "$server_addr",'
       '"client": "$remote_addr",'
       '"size": $body_bytes_sent,'
       '"responsetime": $request_time,'
       '"domain": "$host",'
       '"url":"$request_uri",'
       '"referer": "$http_referer",'
       '"agent": "$http_user_agent",'
       '"status":"$status",'
       '"x_forwarded_for":"$http_x_forwarded_for"}';

解释:
$uri请求中的当前URI(不带请求参数,参数位于$args),不同于浏览器传递的$request_uri的值,它可以通过内部重定向,或者使用index指令进行修改。不包括协议和主机名,例如/foo/bar.html。
$request_uri这个变量等于包含一些客户端请求参数的原始URI,它无法修改,请查看$uri更改或重写URI。
也就是说:$request_uri是原始请求URL,$uri则是经过nginx处理请求后剔除参数的URL,所以会将汉字表现为union。
坑点:
使用$uri可以在nginx对URL进行更改或重写,但是用于日志输出可以使用$request_uri代替,如无特殊业务需求,完全可以替换。

压缩格式

日志中增加了压缩的信息。

http {
    log_format compression '$remote_addr - $remote_user [$time_local] '
                           '"$request" $status $body_bytes_sent '
                           '"$http_referer" "$http_user_agent" "$gzip_ratio"';

    server {
        gzip on;
        access_log /spool/logs/nginx-access.log compression;
        ...
    }
}

upstream格式

增加upstream消耗的时间。

http {
    log_format upstream_time '$remote_addr - $remote_user [$time_local] '
                             '"$request" $status $body_bytes_sent '
                             '"$http_referer" "$http_user_agent"'
                             'rt=$request_time uct="$upstream_connect_time" uht="$upstream_header_time" urt="$upstream_response_time"';

    server {
        access_log /spool/logs/nginx-access.log upstream_time;
        ...
    }
}

参考文档

统计status 出现的次数

awk '{print $9}' access.log | sort | uniq -c | sort -rn

36461 200 
483 500
87 404
9 400
3 302
1 499
1 403
1 301

显示返回302状态码的URL。

awk '($9 ~ /302/)' access.log | awk '{print $7}' | sort | uniq -c | sort -rn

1 /wp-login.php
1 /wp-admin/plugins.php?action=activate&plugin=ewww-image-optimizer%2Fewww-image-optimizer.php&_wpnonce=cc4a379131
1 /wp-admin/

链接:https://www.cnblogs.com/biglittleant/p/8979856.html

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • ip地址
    +关注

    关注

    0

    文章

    290

    浏览量

    16966
  • 日志
    +关注

    关注

    0

    文章

    135

    浏览量

    10616
  • nginx
    +关注

    关注

    0

    文章

    142

    浏览量

    12146

原文标题:死磕nginx系列-nginx日志配置

文章出处:【微信号:magedu-Linux,微信公众号:马哥Linux运维】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    Linux上Nginx获得最佳性能的8种方法

    NGINX 是一种流行的、免费的开源 Web 服务器。默认的 NGINX 配置足以让 Web 服务器正常工作。 但是,如果您想充分利用 NGINX,则需要使用其
    发表于 01-16 09:51 520次阅读

    Nginx日志分割方案

    nginx 默认没有提供对日志文件的分割功能,所以随着时间的增长,access.log 和 error.log 文件会越来越大,尤其是 access.log,其日志记录量比较大,更容易增长文件大小。影响
    发表于 06-19 15:05 429次阅读
    <b class='flag-5'>Nginx</b><b class='flag-5'>日志</b>分割方案

    nginx重启命令linux步骤是什么?

      1、验证nginx配置文件是否正确   方法一:进入nginx安装目录sbin下,输入命令./nginx -t   看到如下显示
    发表于 07-10 16:40

    nginx重启命令linux步骤是什么?

      1、验证nginx配置文件是否正确   方法一:进入nginx安装目录sbin下,输入命令./nginx -t   看到如下显示
    发表于 07-11 17:13

    Linux运维Nginx软件优化之日志优化

    1. 配置Nginx服务相关日志操作1) 进行日志的切割[code][root@oldboy ~]# mkdir /server/scripts/ -p[root@oldboy ~]#
    发表于 12-18 15:17

    flume监控nginx日志的使用和提交

    使用flume监控nginx日志并且提交到kafka里面
    发表于 04-16 07:33

    nginx中的sendfile配置说明

    nginx配置sendfile及详细说明
    发表于 05-05 08:08

    Linux下Nginx配置多个站点的实现方法

    请问Linux下Nginx如何配置多个站点?
    发表于 11-09 06:43

    nginx错误页面配置

    16、nginx 错误页面配置nginx错误页面包括404 403 500 502 503 504等页面,只需要在server中增加以下配置即可: error_page404 403
    发表于 07-26 06:54

    主要学习下nginx的安装配置

    用于nginx编码转换的配置文件;/var/log/nginxnginx的访问和错误日志目录;/var/cache/
    发表于 10-19 14:12

    可快速阅读、查看Nginx日志的工具Rhit

    【导语】:一个格式化 Nginx 日志,可快速阅读、查看 Nginx 日志的工具。 简介 Rhit 可以从标准文件夹中读取 Nginx
    的头像 发表于 04-04 18:01 2542次阅读
    可快速阅读、查看<b class='flag-5'>Nginx</b><b class='flag-5'>日志</b>的工具Rhit

    运行nginx所需的最低配置

    运行nginx所需的最低配置: # /etc/nginx/nginx.confevents {} # event context have to be defined to consi
    的头像 发表于 08-23 10:53 5452次阅读

    配置Nginx访问日志

    每当处理客户请求时,Nginx都会在访问日志中生成一个新记录。每个事件记录都包含一个时间戳,并包含有关客户端和所请求资源的各种信息。访问日志可以显示访问者的位置,访问者的访问的页面等。
    的头像 发表于 05-24 09:59 2254次阅读

    最全的Nginx日志分割教程

    nginx 默认没有提供对日志文件的分割功能,所以随着时间的增长,access.log 和 error.log 文件会越来越大,尤其是 access.log,其日志记录量比较大,更容易增长文件大小。影响
    的头像 发表于 02-16 14:51 968次阅读

    Nginx常用的配置和基本功能讲解

    Nginx 已经广泛应用于 J-one 和 Jdos 的环境部署上,本文对 Nginx 的常用的配置和基本功能进行讲解,适合 Nginx 入门学习。
    的头像 发表于 05-04 10:25 620次阅读