官方文档
http://nginx.org/en/docs/http/ngx_http_log_module.html
日志模块的名称
ngx_http_log_module
log_format
日志格式
access_log
访问日志
error_log
错误日志
open_log_file_cache
日志缓存
open_log_file_cache max=N [inactive=time] [mim_uses=N] [valid=time] | off
该指令默认是禁止的,等同于:
open_log_file_cache off;
open_log_file_cache 指令的各项参数说明如下:
max: 设置缓存中的最大文件描述符数量。如果超过设置的最大文件描述符数量,则采用 LRU (Least Recently Used) 算法清除"较不常使用的文件描述符"。 LRU (Least Recently Used) 算 法的基本概念是:当内存缓冲区剩余的可用空间不够时,缓冲区尽可能地先保留使用者最常使用 的数据,将最近未使用的数据移出内存,腾出空间来加载另外的数据。
inactive: 设置一个时间,如果在设置的时间内没有使用此文件描述符,则自动删除此描述符。 此参数为可选参数,默认的时间为 10 秒钟。
min_uses: 在参数 inactive 指定的时间范围内,如果日志文件超过被使用的次数,则将该日 志文件的描述符记入缓存。默认次数为 1。
valid: 设置多长时间检查一次,看一看变量指定的日志文件路径与文件名是否仍然存在。默 认时间为 60秒。
off: 禁止使用缓存。
open_log_file_cache 指令的设置示例如下:
open_log_file_cache max=1000 inactive=20s min_uses=2 valid=1m;
log_format
简介
Nginx有非常灵活的日志记录模式。每个级别的配置可以有各自独立的访问日志。日志格式通过log_format命令定义。
语法
Syntax: log_format name [escape=default|json] string …;
name 表示格式名称
string 表示定义的格式
默认值
Default: log_format combined “…”;
log_format 有默认的无需设置的combined日志格式,相当于apache的combined日志格式
环境
Context: http context
网站
代理
LB
nginx代理日志格式如下
log_format porxy '$http_x_forwarded_for - $remote_user [$time_local] '
' "$request" $status $body_bytes_sent '
' "$http_referer" "$http_user_agent" ';
定义设置位置
日志格式允许包含的变量
$remote_addr,
远程地址: 记录客户端IP地址
$remote_user
远程用户:记录客户端用户名称
[$time_local]
本地时间:服务器自身时间
$request
请求:记录请求的URL和HTTP协议
"GET /1.html HTTP/1.1"
"GET /index.html HTTP/1.1"
$status
状态:记录请求状态
200
404
503
100
301
$body_bytes_sent
发送给客户端的字节数,不包括响应头的大小
$http_referer
记录从哪个页面链接访问过来的 (超链接)
$http_user_agent
记录客户端浏览器相关信息
火狐
IE
$http_x_forwarded_for
代理IP
old
$request_length
请求的长度(包括请求行,请求头和请求正文)。
$request_time
请求处理时间,单位为秒,精度毫秒;
从读入客户端的第一个字节开始,
直到把最后一个字符发送给客户端后进行日志写入为止。
$time_iso8601
ISO8601标准格式下的本地时间。
$bytes_sent
发送给客户端的总字节数 (可在主配置文件中,增加此项观c)
$msec
日志写入时间。单位为秒,精度是毫秒。
路径
/var/log/nginx/*.log
正确日志
192.168.100.254 - - [17/Dec/2017:14:45:59 +0800] “GET /nginx-logo.png HTTP/1.1” 200 368 “http://192.168.100.10/” “Mozilla/5.0 (Windows NT 6.1; WOW64; rv:57.0) Gecko/20100101 Firefox/57.0” “-”
192.远程主机IP
用户
【2017】时间
get获得,下载,还有post提交。
/nginx-logo.png 下载图片
http版本
状态码 什么结果。对,还是错
368 大小
引用自哪个连接,主页http://192.168.100.10/
Mozilla 5.0浏览器的版本
Windows NT 客户端系统类型
-代理
error_log
个性化404
1 修改主配置文件
vim /etc/nginx/nginx.conf
http {
#添加如下
error_page 404 /404.html;
}
子配置中
vim /etc/nginx/conf.d/xuleilinux.conf
server{
location = /404.html {
root /xuleilinux;
}
}
systemctl restart nginx
2 创建错误反馈页面
vim /xuleilinux/404.html
3 访问
访问不存在的页面
4 查看404日志
观察404页面的现象。
修改前
修改后
日志缓存
目的:优化服务器
简介
大量访问到来时,对于每一条日志记录,都将是先打开文件,再写入日志,然后关闭.占用了系统的IO,与业务无关。
可以使用open_log_file_cache来设
Syntax:
open_log_file_cache max=1000 inactive=20s min_uses=3 valid=1m ;
max 1000 指的是日志文件的FD,最大的缓存数量为1000。超了怎么办,看下面
min_users 3 20秒内小于3次访问的FD,就给你清掉,结合inactive 20s 的时间。
valid 1m 检查周期为1分钟。
总结:缓存最多1000个,到了极限,每分钟开始清除掉 20秒内小于3次的文件FD.
Default:
open_log_file_cache off;
Context:
http, server, locatition
http{} 将整个服务器所有网站,所有页面的日志进行缓存
server{} 将某一个网站的所有页面日志,进行缓存
location{}某一个页面的日志,进行缓存。
Nginx安装,会默认启动日志轮转。
rpm -ql nginx| grep log
/etc/logrotate.d/nginx
/var/log/nginx
vim /etc/logrotate.d/nginx
/var/log/nginx/*log {
# 待切割的日志
create 0644 nginx nginx
#创建新的日志文件,属主
daily
#天
missingok
#丢失不提示
rotate 10
#10份
compress
#压缩
delaycompress
#总是与compress选项一起用,
#delaycompress选项指示logrotate不要将最近的归档压缩,
#压缩将在下一次轮循周期进行。。
notifempty
#空文件的话,不转储
sharedscripts
#轮转后脚本
postrotate
/bin/kill -USR1 `cat /run/nginx.pid 2>
/dev/null` 2>/dev/null || true
#USR1亦通常被用来告知应用程序重载配置文件
endscript
#在所有其它指令完成后,
#postrotate和endscript里面指定的命令将被执行。
#在这种情况下,rsyslogd 进程将立即再次读取其配置并继续运行。
}
logrotate -f /etc/logrotate.conf
立刻轮转日志
1.cron每小时呼唤一次anacron
vim /etc/cron.hourly/0anacron
2.anacrontab以天,周,月循环往复
vim /etc/anacrontab
3.天循环
vim /etc/cron.daily/logrotate
4.立刻循环
指令 /usr/sbin/logrotate -s /var/lib/logrotate/logrotate.status /etc/logrotate.conf
5.anacron当天的时间戳
vim /var/spool/anacron/cron.daily
20180731
6.anacron循环后的时间戳
vim /var/lib/logrotate/logrotate.status
“/var/log/nginx/host.404.log” 2017-11-19-0:8:56
根据该时间确定是否轮转。
下载一份log文件解压后查看
1.统计某天的pv(访问量)
grep ‘05/Sep/2017’ xa.mobiletrain.org.log |wc -l
2. 统计2017年9月5日 一天内访问最多的3个IP(ip top10)
grep ‘05/Sep/2017’ cd.mobiletrain.org.log | awk '{ ips[$1]++ } END{for(i in ips){print i,ips[i]} } '| sort -k2 -rn | head -n1
3. 统计2017年9月5日 每个URL访问内容总大小($body_bytes_sent),和次数
4. 统计2017年9月5日 每个IP访问状态码为404及出现次数($status)
grep ‘05/Sep/2017’ sz.mobiletrain.org.log |
awk ‘{if($9=“404”){ip_code[$1" "$9]++}}
END{for(i in ip_code){print i,ip_code[i]}}’
目的
将主页设置成随机页面,是一种微调更新机制
启动随机主页
1 创建主页目录
mkdir /app
2 创建多个主页
touch /app/{blue.html,green.html,red.html,.yellow.html}
在不同的页面书写不同的内容,例如
<html>
<head>
<title>green colortitle>
head>
<body style="background-color:green">
<h1>green color!h1>
body>
html>
3 启动随机主页
vim /etc/nginx/cond.d/default.conf
server{
location / {
#root /usr/share/nginx/html;
#index index.html index.htm;
root /app;
random_index on;
}
}
注:隐藏文件并不会被随机选取
systemctl restart nginx
刷新主页,观察变化
目的
如果我们用模板生成网站的时候,因为疏漏或者别的原因造成代码不如意,但是此时因为文件数量巨大,不方便全部重新生成,那么这个时候我们就可以用此模块来暂时实现纠错。另一方面,我们也可以利用这个实现服务器端文字过滤的效果。
启动替换
vim /etc/nginx/conf.d/default.conf
server {
#在server{下面插入
sub_filter nginx 'QianFeng';
sub_filter_once on;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
#说明
#替换模块 将nginx 替换成 QianFeng
#单次替换 开启
原理介绍
启动该模块,使文件传输前进行压缩,提升传输效率。
启用模块
1 观察未压缩传输
拷贝图片至网站主目录
rz
拷贝tar包至网站主目录
tar cvf etc.html /etc
拷贝文本至文件主目录
dd if=/dev/zero of=1.html bs=1M count=200
2 启用压缩功能
http {
在http标签中启动该功能
gzip on;
gzip_http_version 1.1;
gzip_comp_level 2;
gzip_types text/plain application/javascript application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png;
gzip_static on;
# nginx对于静态文件的处理模块
systemctl restart nginx
3.测试结果
原理介绍
无缓存,每次访问服务器,均是全文传输。
开启缓存可以加速浏览网站。
观察浏览器缓存
1 开启浏览器缓存,浏览页面。(默认)
2 禁用缓存。浏览页面
3 解析缓存原理
4 开启服务器缓存模块
vim /etc/nginx/nginx.conf
location / {
root /usr/share/nginx/html
index index.html index.htm;
expires 24h;
}
5.理解nginx服务器启动缓存时间,加速浏览。
缺点是时效性降低。
日志原理介绍
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
日志格式中的http_referer是记录,访问点引用的URL。也就是超链接的上一级地址。
通过这段地址,可以发现一种网络行为——盗链。非法盗链会影响站点的正常访问。
通过http_referer模块可以控制这一点。防止非法盗链现象。
展现盗链现象,启动防盗链
1 搭建一个a.com网站
2 搭建一个b.com网站
创建b.com.conf配置文件
vim /etc/nginx/conf.d/b.com.conf
在b的网页中盗链a的图片,自己并不放图片
重启并访问b.com
3.查看两个网站的日志
访问a网站查看a的访问日志
访问b网站查看b的访问日志
在a.com.conf中启动防盗链功能
location / {
root /a.com;
index index.html index.htm;
valid_referers none blocked a.com;
if ($invalid_referer) {
return 403;
}
}
再次访问,发现a正常访问,b无法访问。