Nginx 基础入门篇 .3

文章目录

  • Nginx 日志Log
    • 日志配置
      • 日志模块
      • 相关指令
      • 日志的格式与命令
      • 访问日志与错误日志
    • 日志轮转 &切割
      • 前言
      • 观察日志了解详情
      • 轮转语句
      • 切割原理回顾
    • 练习
  • Nginx WEB模块
    • 随机主页(random_index_module)
    • 替换模块 (sub_module)
    • 文件压缩(ngx_http_gzip_module)
  • 页面缓存(ngx_http_headers_module)
    • 防盗链(ngx_http_referer_module)
    • 解决盗链信息
    • 连接状态(stub_status_module)

Nginx 日志Log

日志配置

日志模块

官方文档
http://nginx.org/en/docs/http/ngx_http_log_module.html
日志模块的名称
ngx_http_log_module

Nginx 基础入门篇 .3_第1张图片

相关指令

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" ';

定义设置位置

vim /etc/nginx/nginx.conf
Nginx 基础入门篇 .3_第2张图片

日志格式允许包含的变量

$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页面的现象。
修改前
Nginx 基础入门篇 .3_第3张图片
Nginx 基础入门篇 .3_第4张图片
修改后
Nginx 基础入门篇 .3_第5张图片

日志缓存
目的:优化服务器
简介
大量访问到来时,对于每一条日志记录,都将是先打开文件,再写入日志,然后关闭.占用了系统的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 进程将立即再次读取其配置并继续运行。
}

Nginx 基础入门篇 .3_第6张图片

轮转语句

logrotate -f /etc/logrotate.conf
立刻轮转日志
Nginx 基础入门篇 .3_第7张图片

切割原理回顾

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文件解压后查看
Nginx 基础入门篇 .3_第8张图片
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
Nginx 基础入门篇 .3_第9张图片

3. 统计2017年9月5日 每个URL访问内容总大小($body_bytes_sent),和次数
Nginx 基础入门篇 .3_第10张图片

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]}}’
Nginx 基础入门篇 .3_第11张图片


Nginx WEB模块

随机主页(random_index_module)

目的
将主页设置成随机页面,是一种微调更新机制
启动随机主页
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;
}
}

Nginx 基础入门篇 .3_第12张图片
注:隐藏文件并不会被随机选取
systemctl restart nginx
刷新主页,观察变化
Nginx 基础入门篇 .3_第13张图片Nginx 基础入门篇 .3_第14张图片Nginx 基础入门篇 .3_第15张图片

替换模块 (sub_module)

目的
如果我们用模板生成网站的时候,因为疏漏或者别的原因造成代码不如意,但是此时因为文件数量巨大,不方便全部重新生成,那么这个时候我们就可以用此模块来暂时实现纠错。另一方面,我们也可以利用这个实现服务器端文字过滤的效果。

启动替换
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
#单次替换 开启

未替换前
Nginx 基础入门篇 .3_第16张图片

替换后
Nginx 基础入门篇 .3_第17张图片
打开全部替换
Nginx 基础入门篇 .3_第18张图片
重新验证
Nginx 基础入门篇 .3_第19张图片

文件压缩(ngx_http_gzip_module)

原理介绍
启动该模块,使文件传输前进行压缩,提升传输效率。
启用模块
1 观察未压缩传输

拷贝图片至网站主目录
rz
拷贝tar包至网站主目录
tar cvf etc.html /etc
拷贝文本至文件主目录
dd if=/dev/zero of=1.html bs=1M count=200
Nginx 基础入门篇 .3_第20张图片
Nginx 基础入门篇 .3_第21张图片
Nginx 基础入门篇 .3_第22张图片

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.测试结果


Nginx 基础入门篇 .3_第23张图片
Nginx 基础入门篇 .3_第24张图片
压缩包和图片类对象本身已经自带压缩功能。所以压缩比例较小低。
文本类对象在压缩试验中,压缩比例体现优越。

页面缓存(ngx_http_headers_module)

原理介绍
无缓存,每次访问服务器,均是全文传输。
开启缓存可以加速浏览网站。
观察浏览器缓存
1 开启浏览器缓存,浏览页面。(默认)

第一次返回状态码200.页面对象全文传输
第二次返回状态304.页面对象部分传输。
Nginx 基础入门篇 .3_第25张图片Nginx 基础入门篇 .3_第26张图片

2 禁用缓存。浏览页面

返回码200.全文传输
理解浏览器缓存作用。
Nginx 基础入门篇 .3_第27张图片
Nginx 基础入门篇 .3_第28张图片

3 解析缓存原理
在这里插入图片描述
4 开启服务器缓存模块
vim /etc/nginx/nginx.conf

    location / {
     
        root   /usr/share/nginx/html
        index  index.html index.htm;
        expires 24h;
    }


开启之前

Nginx 基础入门篇 .3_第29张图片

开启之后
Nginx 基础入门篇 .3_第30张图片

5.理解nginx服务器启动缓存时间,加速浏览。
缺点是时效性降低。

防盗链(ngx_http_referer_module)

日志原理介绍

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网站

创建a.com.conf配置文件
Nginx 基础入门篇 .3_第31张图片
在主页中插入图片并访问


Nginx 基础入门篇 .3_第32张图片

分离a.com日志
将配置文件中成功日志复制到a.com.conf中并更改路径
在这里插入图片描述

重启nginx后添加域名解析后访问
Nginx 基础入门篇 .3_第33张图片

2 搭建一个b.com网站

创建b.com.conf配置文件
vim /etc/nginx/conf.d/b.com.conf
Nginx 基础入门篇 .3_第34张图片

在b的网页中盗链a的图片,自己并不放图片
在这里插入图片描述
Nginx 基础入门篇 .3_第35张图片

重启并访问b.com

3.查看两个网站的日志

在这里插入图片描述

访问a网站查看a的访问日志

Nginx 基础入门篇 .3_第36张图片

访问b网站查看b的访问日志

在这里插入图片描述

此时a网站的日志也出现访问信息
在这里插入图片描述
此处就是盗链信息
a被b盗链,b盗链a网站信息,自己本身没有资源信息

解决盗链信息

在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无法访问。

连接状态(stub_status_module)

Nginx 基础入门篇 .3_第37张图片

Nginx 基础入门篇 .3_第38张图片

你可能感兴趣的:(nginx,linux,nginx)