Nginx默认的根目录是哪个

文件路径/usr/local/nginx/clear_log.sh

默认根目录在配置文件nginx.conf中

nginx默认日志路径_nginx默认日志路径修改nginx默认日志路径_nginx默认日志路径修改


nginx默认日志路径_nginx默认日志路径修改


windows和linux的默认根目录好像是不同的

找到root指令Nginx 日志相关配置有 2 个地方:access_log 和 log_format 。后面的路径,就是nginx默认的根目录

windows下应该是nginx所在目录下的html目录

默认目录为/usr/share/nginx/html

nginx naxsi 模块

然后你就可以处理旧的日志文件了。

于是找到ng拦截日志,路径在ng配置的error日志中,默认在nginx根目录下的log目录下的error.log

&ngx_core_module,

如下:

上周项目组的伙伴在灰度访问项目时,发现发送不了消息了。排查各个请求发现有请求被ng拦截了。

那么我们就知道这个日志表明:该uri请求违反了id=11的naxsi规则,被拦截了。那么id=11的规则是什么呢?让我们了解下naxsi定义的规则,配置在ng的中规则文件:

5、匹配区域

那么 @MainRule "msg:unknown content-type" id:11; 就是请求违反的规则,不知名的内容类型。从浏览器此请求header看,它的content-type为text/plain.

其中wl 单独匹配放过某项规则,如:

mz:MATCHZONE 配合wl规则,制定对应匹配区域规则,区域包括: URL, ARGS, HEADERS, BODY.

示例:为/foo 请求放过BODY请求中参数名中的规则1310,1311

备注:增加|NAME标示对应目标为参数名,而非参数值。

更多示例,可参考

Linux系统怎么分析Nginx日志

"yesterday"

Linux系统下Nginx 日志可以查看系统运行记录和出错说明,对Nginx 日志的分析可以了解系统运行的状态。那么Linux系统Nginx日志怎么分析呢?

/var/log/secure (用户验证相关的安全性)

默认的格式:

access_log /data/logs/nginx-access.log;

log_format old ‘$re3.4 访问量前10的IPmote_addr [$time_local] $status $request_time $body_bytes_sent ’

‘“$request” “$_referer” “$_user_agent”’;

相信大部分用过 Nginx 的人对默认 Nginx 日志格式配置都很熟悉,对日志的内容也很熟悉。但是默认配置和格式虽然可读,但是难以计算。

Nginx 日志刷盘相关策略可配置:

access_log /data/logs/nginx-access.log buffer=32k flush=5s;

这决定了是否实时看到日志以及日志对磁盘 IO 的影响。

Nginx 日志能够记录的变量还有很多没出现在默认配置中:

比如:

请求数据大小:$request_length

返回数据大小:$bytes_sent

请求耗时:$request_time

所用连接序号:$connection

当前连接发生请求数:$connection_requests

Nginx 的默认格式不可计算,需要想办法转换成可计算格式,比如用控制字符 ^A (Mac 下 ctrl+v ctrl+a 打出)分割每个字段。

log_format 的格式可以变成这样:

log_format new ‘$remote_addr^A$_x_forwarded_for^A$host^A$time_local^A$status^A’

‘$request_time^A$request_length^A$bytes_sent^A$_referer^A$request^A$_user_agent’;

这样之后就通过常见的 Linux 命令行工具进行分析了:

查找访问频率的 URL 和次数:

cat access.log | awk -F ‘^A’ ‘{print $10}’ | sort | uniq -c

cat access.log | awk -F ‘^A’ ‘{if($5 == 500) print $0}’

查找当前日志文件 500 错误的数量:

cat access.log | awk -F ‘^A’ ‘{if($5 == 500) print $0}’ | wc -l

查找某一分钟内 500 错误访问的数量:

cat access.log | awk -F ‘^A’ ‘{if($5 == 500) print $0}’ | grep ’09:00’ | wc-l

查找耗时超过 1s 的慢请求:

tail -f access.log | awk -F ‘^A’ ‘{if($6》1) print $0}’

如只想查看某些位:

tail -f access.log | awk -F ‘^A’ ‘{if($6》1) print $3″|”$4}’

查找 502 错误最多的 URL:

cat access.log | awk -F ‘^A’ ‘{if($5==502) print $11}’ | sort | uniq -c

查找 200 空白页

cat access.log | awk -F ‘^A’ ‘{if($5==200 && $8 《 100) print $3″|”$4″|”$11″|”$6}’

tail -f access.log | cat -e

或者

照着这个思路可以做很多其他分析,比如 UA 最多的访问;访问频率的 IP;请求耗时分析;请求返回包大小分析;等等。

这就是一个大型 Web 日志分析系统的原型,这样的格式也是非常方便进行后续大规模 batching 和 streaming 计算。

以上就是Linux系统Nginx日志怎么分析的全部内容了,可以看出来Nginx日志还是有很强大的作用的。

如何定时清理Linux系统中的Nginx日志

Liunx的配置文件在/etc/rsyslog.d里,可以看到如下信息

nginx日志文件需要手动分割,创建脚本文件clear_log.sh

ngx_uint_t open_file_cache_min_uses;

vi clear_log.sh。输入如下内容

#!/bin/bash

cp /usr/local/nginx/logs/error.log /usr/local/nginx/error-$(date -d “yesterday” +“%Y%m%d”).log

cat /dev/null 》 /usr/local/nginx/logs/error.log

cp/usr/local/nginx/logs/access.log /var/log/nginx/access/access-$(date -d “yesterday” +“%Y%m%d”).log

#先原来的正常访问日志

cat /dev/null 》 /usr/local/ngi很大程度上会在./var/log/nginx/error.log位置,具体你find一下nx/logs/access.log

创建dellog.sh文件,路径/usr/local/nginx

vi dellog.sh

find /usr/nginx/logs/error -mtime +7 -type f -name /.log | xargs rm -f

find /usr/nginx/logs/access -mtime +7 -type f -name /.log | xargs rm -f

启动linux下的任务,将刚才创建好的两个shell脚本加入此

crontab -e,输入如下内容

0 0 /usr/nginx/clear_log.sh

逻辑详解:比如现在是3月18日0点0分,系统会自动执行clear_log.sh与dellog.sh两个shell脚本。clear_log.sh会把3月17日的日志文件分别生成为access_20140317.log与error_20140318.log,然后把原来的access.log与error.log分别清空。dellog.sh则会自动判断该文件的创建时间,如果是十五天前的就会自动清除

nginx日志满了就访问不了吗

192.168.0.1 - - [20/Jun/2013:17:41:40,8 +0800] "GET / HTTP/1.1" ...那么可以执行下面的命令:

nginx日志满了就访问不了。因为在0,nginx目录里面access.log会不断增加,如果你时间长不清理会很占硬盘,所以nginx日志满了就访问不了。在登录后台的时候,我们可以看到这里有关闭系统日志的,但是好像路径并不是这样的,我们需要解决的是access.log文件,关闭生成之后,我们还需要重启NGINX,貌似关闭了web默认日志功能,但是在nginx目录里面access.log还是会不断增加,如果你时间长不清理会很占硬盘,所以说过一段时间你自己去删除掉这个大的日志文件。

如何用Shell截取nginx最近10分钟的日志

日志文件如下:

这个问题不太适合用shell脚本,perl之类的脚本做这个工作会更高效一些,无论是开发效率还是运行效率。

用shell的话,tail命令是不合适的,根本不知道从哪行开始截,如果还要计算的话,那就把问题复杂化了。用ta对比生产其他ng配置,发现其在naxsi的白名单中放过了id11,故可正常运行。 那么,我们再灰度环境配置中,增加此白名单即可解决。 让我们来看看,如何配置naxsi的白名单。c命令就是了,tac logfile | {filter logic} | tac,如日志文件是下面的格式:

tac log | awk 'BEGIN{ "date -d "-10 minuteclcf->error_log是模块中的,其主要记录和请求相关的日志。" +"%H:%M:%S"" | getline min10ago } { if (substr($4, 14) > min10ago) print else exit }' | tac这组命令没有考虑日期,只比较时间部分。

nginx 开启$request_id

保存后退出,输入命令crontab root就会看到/var/spool/cron/文件夹下看到相应的副本文件root。至此完成nginx日志按天拆分与定期清除。

1.修改在nginx.conf同一路径下的fastcgi_params文件,添加如下内容

fastcgi_param HTTP_REQUEST_ID 查找当前日志文件 500 错误的访问: $request_id;

2.添加nginx的日志格式:

log_format sas '$_x_forwarded_for - $request_id';

106.121.69.190 - 06/var/log/btmp(记录失败的的记录)a1b46d7113831c32f572293ce4e813

Linux系统日志怎么查看

2. 如何查看Linux日志

1. 前言

cycle->new_log主要记录如进程启动,nt等。

在Linux日常管理中,我们肯定有查看某些服务的日志需求,或者是系统本身的日志。本文主要介绍如何查看Linux的系统日志,包括文件的路径、工具的使用等等。会看Linux日志是非常重要的,不仅在日常作中可以迅速排错,也可以快速的定位。

NULL},

Linux日志文件的路径一般位于,/var/log/,比如ngix的日志路径为/var/log/nginx/,如果要查看某服务的日志,还可以使用ctl status xxx,比如查看ssh服务的壮态,ctl status sshd

查看Linux某服务的日志

在linux系统当中,有三个主要的日志子系统:

1、连接时间日志:由多个程序执行,把记录写入到/var/log/wtmp和/var/run/utmp,

login等程序会更新wtmp和utmp文件,使系统能够跟踪谁在何时登录到系统。

2、进程统计:由系统内核执行,当一个进程终止时,为每个进程往进程统计文件中写一个记录。进程统计的目的是为系统中的基本服务提供命令使用统计

3、错误日志:由rsyslogd守护程序执行,各种系统守护进程、用户程序和内核通过rsyslogd守护程序向文件/var/log/messages报告值得注意的时间。另外有许多linux程序创建日志,像HTTP和FTP这样提供的也保持详细的日志。

4、其他日志……

查看Linux日志默认路径

可以看到在/var/log目录下存在很多的日志文件,接下来就对里面的一些常用日志文件进行分析

主要日志文件介绍:

内核及公共消息日志:/var/log/messages

任务日志:/var/log/cron

系统日志:/var/log/dmesg

邮件系统日志:/var/log/maillog

用户登录日志:/var/log/lastlog

/var/log/boot.log(记录系统在过程中发生的时间)

/var/log/wtmp(当前登录用户详细信息)

/var/run/utmp(用户登录、注销及系统开、关等)

日志文件详细介绍:

/var/log/secure

Linux系统安全日志,记录用户和工作组的情况、用户登陆认证情况

例子:我创建了一个zcwyou的用户,然后改变了该用户的密码,于是该信息就被记录到该日志下

Linux系统安全日志默认路径

该日志就详细的记录了作的过程。

内核及公共信息日志,是许多进程日志文件的汇总,从该文件中可以看出系统任何变化

查看Linux内核及公共信息日志

系统日志

该日志使用dmesg命令快速查看一次系统的日志

查看Linux系统系统日志

最近的用户登录,一般记录一次的登录

该日志不能用诸如cat、tail等查看,因为该日志里面是二进制文件,可以用lastlog命令查看,它根据UID排序显示登录名、端口号(tty)和上次登录时间。如果一个用户从未登录过,lastlog显示 Nr logged。

该日志文件记录每个用户登录、注销及系统的启动、停机的。该日志为二进制文件,不能用诸如tail/cat/等命令,使用last命令查看。

记录邮件的收发

此文件是记录错误登录的日志,可以记录有人使用ssh服务的日志。该文件用lastb打开

该日志记录当前用户登录的情况,不会保存记录。可以用who/w命令来查看

3. 常用的日志分析工具与使用方法

3.1 统计一个文本中包含字符个数

3.2 查看当天访问排行前10的

3.3 查看apache的进程数

cut部分表示取第1列即IP列,取第4列则为URL的访问量

3.5 查看最耗时的页面

按第2列响应时间逆序排序

3.6 使用grep查找文件中指定字符出现的次数

-o 指示grep显示所有匹配的地方,并且每一个匹配单独一行输出。这样只要统计输出的行数就可以知道这个字符出现的次数了。

4. 总结

如何用Shell截取nginx最近10分钟的日志

查看Linux日志需求了解和熟悉使用一些常用的工具方能提升我们的查找和定位效率。比如使用 Grep 搜索,使用Tail命令,使用Cut,使用AWK 和 Grok 解析日志和使用 Rsyslog 和 AWK 过滤等等,只要能掌握这些工具。我们才能高效地处理和定位故障点。

凭感觉,这个问题不太适合用shell#每天0点执行 /usr/nginx/dellog.sh脚本,perl之类的脚本做这个工作会更高效一些,无论是开发效率还是运行效率。

用shell的话,tail命令是不合适的,根本不知道从哪行开始截,如果还要计算的话,那就把问题复杂化了。用tac命令就是了,tac logfile | {filter logic} | tac,如日志文件是下面的格式:

192.168.0.1 - - [20/Jun/2013:17:41:48 +0800] "GET / HTTP/1.1" ...

那么可以执行下面的命令:

tac log | awk 'BEGIN{ "date -d "-10 minute" +"%H:%M:%S"" | getline min10ago } { if (substr($4,#先原来的错误日志文件,请根据自己实际的日志路径填写 14) > min10ago) print else exit }' | tac

这组命令没有考虑日期,只比较时间部分。

nginx访问日志求解 面的IP是什么

0 0 /usr/nginx/dellog.sh

查询现有的NGinx Log_format 格式 。其中

tail -f access.log | tr ‘^A’ ‘|’

会在 X-Forwarded-For 头追加自己的ip , 它们用逗号分隔 ,一般个会是真实iP ,其他都是的 iP

#清空原来的正常访问日志

关于nginx的描述,哪一种是错误的,access

#清空错误日志文件

nginx配置中有关日志的配置主要是围绕着下面两个指令:

1、error_log

2、access_log:记录访问日志

首先要强调的一点是,如果access日志和error日志都是常量文件名(因为access支持变量文件名,后续会讲到),那么nginx进程会缓存文件描述符直到进程结束。

1)进程重启

2)收到了NGX_REOPEN_SIGNAL信号,会产生新的日志文件

其他情况下,日志的fd不变,所以当进程运行中,删除了日志文件的话,并不会生成新的日志文件,且日志都会丢失

下面详细讲一下这两个指令的来龙去脉

一:先说error_log:

nginx有两个模块支持error_log指令:

一个是 ngx_errlog_module ,这个模块只有一个指令,就是error_log ,配置类型为:NGX_MAIN_CONF,回调函数为:ngx_error_log;

另一个是 ngx__core_module,这个模块中也有指令:error_log ,配置类型为:NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF,回调函数为:ngx__core_error_log。

static ngx_command_t ngx_errlog_commands[] = {

{ngx_string("error_log"),

NGX_MAIN_CONF|NGX_CONF_1MORE,

ngx_error_log,

static ngx_command_t ngx__core_commands[] = {

{ ngx_string("error_log"),

NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_1MORE,

ngx__core_error_log,

NULL },

}这样会产生几个疑问:

1:为什么需要两个相同的指令实现相同的功能。

2:两个指令的类型均支持NGX_HTTP_MAIN_CONF ,那么在main中配置的error_log到底使用的是哪一个

3:两者的作用关系。

下面来解释一下:

nginx在进行模块注册时,会发现 ngx_errlog_module 模块是先于 ngx__core_module 模块注册的 。

在nginx在解析配置文件的时候 ,见到 error_log,会按照注册模块的顺序查找指令,这样,会先找到ngx_errlog_module模块,如果此时,error_log是在main配置的,那么和ngx_errlog_module模块error_log的NGX_HTTP_MAIN_CONF match,执行ngx_error_log。

上面提到了ngx_error_log 和 ngx__core_error_log两个函数,这两个函数的功能基本一致,但是因为两个配置作用域不同,所以配置存储位置不同:ngx_errlog_module存储在cycle->new_log,ngx__core_module存储在 core模块数据结构ngx__core_loc_conf_s的error_log(在此简写成:clcf->error_log)。

但是主进程启动的时候,此时还没有读取配置文件,即没有指定日志打印在哪里。nginx这时候虽然可以将一些出错内容或者结果输到标准输出,但是如果要记录一些系统初始化情况,socket状况,还是需要写到日志文件中去的。在nginx的main函数中,首先会调用ngx_log_init 函数,默认日志文件为:安装路径/logs/error.log,如果这个文件没有权限访问的话,会直接报错退出。在mian函数结尾处,在ngx__process_cycle函数调用之前,会close掉这个日志文件。

如果只在main配置了error_log,{}中没有设置,那么clcf->error_log赋值为clcf->error_log,如下:

static char

ngx__core_merge_loc_conf(ngx_conf_t cf, void parent, void child)

{ngx__core_loc_conf_t prev = parent;

ngx__core_loc_conf_t conf = child;

。。。。。。

if (conf->error_log == NULL) {

if (prev->error_log) {

conf->error_log = prev->error_log;

} else {

conf->error_log = &cf->cycle->new_log;

}}

。。。。。。

}那为什么不把两个指令合并到一起呢。

首先看一下模块注册顺序:

ngx_module_t ngx_modules[] = {

&ngx_errlog_module,

&ngx_conf_module,

&ngx_nts_module,

&ngx_nt_core_module,

&ngx_epoll_module,

&ngx_regex_modNGX_HTTP_LOC_CONF_OFFSET,ule,

&ngx__core_module,

&ngx__log_module,

......

}可见ngx_errlog_module 和 ngx__core_module中间有n多模块。这些模块是于的,而且需要日志的打印,这些日志肯定是需要记录的。

则此模块不可省,那么考虑把ngx__core_module的error_log合并过来呢,想想也不行,为什么呢?

想想ngx_errlog_module将error_log信息存在哪里,想想ngx__core_module的error_log信息存在哪里。

在调用ngx_error_longx_null_commandg时候,把针对不同server或者location的error_log信息存储在哪里。(模块之间不能深度耦合)

为了两个模块互不影响,这是个好办法呀!

二:access_log

接下来看一下access_log,access_log指令是属于ngx__log_module模块。

ngx__log_module有三个指令:

static ngx_command_t ngx__log_commands[] = {

{ ngx_string("log_format"),

NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_2MORE,

ngx__log_set_format,

NGX_HTTP_MAIN_CONF_OFFSET,

NULL },

{ ngx_string("access_log"),

NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_HTTP_LIF_CONF

|NGX_HTTP_LMT_CONF|NGX_CONF_TAKE123,

ngx__log_set_log,

NULL },

{ ngx_string("open_log_file_cache"),

NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_TAKE1234,

ngx__log_open_file_cache,

NULL },

每个block都可以配置上面的指令 ,这些指令对应着各个block配置中的loc[ngx__log_module.index](要理解这个,需要知道配置文件的整个解析过程和block对应关系),即下面这个数据结构:

typedef struct {

ngx_array_t logs; / array of ngx__log_t /

ngx_open_file_cache_t open_file_cache;

time_t open_file_cache_valid;

ngx_uint_t off; / unsigned off:1 /

} ngx__log_loc_conf_t;

关于access_log主要有以下几个点:

1、ngx__log_module是属于nginx状态机一个阶段NGX_HTTP_LOG_PHASE的处理模块,即一个请求结束时执行的,它的任务就是打印这次request的访问情况。

2、access_log支持根据变量指令路径,如:

access_log logs/'$remote_addr'access.log main;

3、不管是变量路径还是常量路径,都将信息放入了 ngx__log_loc_conf_t的logs这个数组里进行管理,logs数组的元素是ngx__log_t。