nginx日志管理与限速
1、日志简介
nginx日志主要有两种:访问日志和错误日志。访问日志主要记录客户端访问nginx的每一个请求,格式可以自定义;错误日志主要记录客户端访问nginx出错时的日志,格式不支持自定义。两种日志都可以选择性关闭。
通过访问日志,你可以得到用户地域来源、跳转来源、使用终端、某个URL访问量等相关信息;通过错误日志,你可以得到系统某个服务或server的性能瓶颈等。因此,将日志好好利用,你可以得到很多有价值的信息。
1.log_format指令用来设置日志的记录格式,语法如下:
log_format name format (format ....)
具体日志格式如下:
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
$http_x_forwarded_for 和 $remote_user用于记录ip地址
$remote_user 用来记录远程客户端用户名称
$remote_addr 用于记录客户端地址
$time_local 用来记录访问时间及地区
$http_host 用于记录请求地址,即浏览器中输入的地址(IP或域名)
$upstream_status 用于记录upstream状态
$request 用于记录请求的URL与HTTP协议
$status 用于记录请求的状态,例如状态为200,页面找不到时为404
$body_bytes_sent 用于记录发送给客户端的文件主体内容大小
$http_referer 用于记录是从哪个页面链接访问过来的
$http_user_agent 用于记录客户端浏览器的相关信息
.............
(从0.7.4版本后nginx支持变量的使用)
日志的定义:access_log /data/log/$server_name.log mylogformate buffer=32k
buffer=32k;表示设置内存缓冲区的大小
2、开启日志打开缓存
为了提高包含变量的日志文件存放路径的性能,可以使用open_log_file_cache指令来设置,格式如下:
open_log_file_cache max=N [inactive=time][min_use=N][valid=time] |off
该指令默认是禁止的,等同于: open_log_file_cache off;
max:设置缓存中的最大文件描述数量。
inactive:设置一个时间,如果在设置的时间内没有使用此文件描述,则自动删除此描述。
min_uses:在参数inactive指定的时间范围内,如果日志文件超过使用次数,则该日志文件的描述计入缓存,默认为10秒钟
valid:设置多长时间检查一次,看日志文件路径与文件名是否仍然存在,默认60秒。
示例:open_log_file_cache max=1000 inactive=20s min_uses=2 valid=1m
3、日志分割
nginx的日志文件没有rotate功能。如果你不处理,日志文件将变得越来越大,我们可以写一个nginx日志切割脚本来自动切割日志文件。
第一步就是重命名日志文件,不用担心重命名后nginx找不到日志文件而丢失日志。在你未重新打开原名字的日志文件前,nginx还是会向你重命名的文件写日志,linux是靠文件描述符而不是文件名定位文件。
第二步向nginx主进程发送USR1信号。nginx主进程接到信号后会从配置文件中读取日志文件名称,重新打开日志文件(以配置文件中的日志名称命名),并以工作进程的用户作为日志文件的所有者。重新打开日志文件后,nginx主进程会关闭重名的日志文件并通知工作进程使用新打开的日志文件。工作进程立刻打开新的日志文件并关闭重名名的日志文件。然后你就可以处理旧的日志文件了。[或者重启nginx服务]
nginx日志按日期自动切割脚本如下
#!/bin/bash
#设置日志文件存放目录
logs_path="/usr/local/nginx/logs/"
#设置pid文件
pid_path="/usr/local/nginx/nginx.pid"
#重命名日志文件
mkdir -p ${logs_path}$(date -d "yesterday"+"%Y")/$(date -d "yesterday"+"%m")/
mv ${logs_path}access.log ${logs_path}$(date -d "yesterday"+"%Y")/$(date -d "yesterday"+"%m")/access_$(date -d "yesterday"+"%Y%m%d").log
#向nginx主进程发信号重新打开日志
kill -USR1 `cat ${pid_path}`
保存以上脚本nginx_log.sh
#创建crontab 设置作业
0 0 * * * bash /usr/local/nginx/nginx_log.sh
这样就每天的0点0分把nginx日志重命名为日期格式,并重新生成今天的新日志文件。
4、设定限速的示例
location /download{
limit_rate 256k;#限速
proxy_pass http://1.2.3.4;
proxy_set_header Host $host;
proxy_set_header X-Forwarder-For $remote_addr;
}
location /movie{
limit_rate_after 10m;#缓冲10m
limit_rate 100k;#缓冲结束后,限速为100k
}
if($http_user_agent ~Google|Yahoo|baidu){
limit_rate 20k;
}
nginx日志管理与限速的更多相关文章
- Nginx教程(三) Nginx日志管理
Nginx教程(三) Nginx日志管理 1 日志管理 1.1 Nginx日志描述 通过访问日志,你可以得到用户地域来源.跳转来源.使用终端.某个URL访问量等相关信息:通过错误日志,你可以得到系统某 ...
- nginx之旅(第二篇):nginx日志管理、nginx防盗链、nginx虚拟主机
一.nginx日志管理 Nginx访问日志主要有两个参数控制 1) log_format #用来定义记录日志的格式(可以定义多种日志格式,取不不同名字即可) log_format log_name s ...
- Nginx教程(三) Nginx日志管理 (转)
Nginx教程(三) Nginx日志管理 1 日志管理 1.1 Nginx日志描述 通过访问日志,你可以得到用户地域来源.跳转来源.使用终端.某个URL访问量等相关信息:通过错误日志,你可以得到系统某 ...
- nginx 日志管理
日志管理 我们观察nginx的server段,可以看到如下类似信息 #access_log logs/host.access.log main; 这说明 该server, 它的访问日志的文件是 ...
- nginx 日志管理配置详解
nginx的日志管理 log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$statu ...
- Nginx日志管理
1 日志管理 1.1 Nginx日志描述 通过访问日志,你可以得到用户地域来源.跳转来源.使用终端.某个URL访问量等相关信息:通过错误日志,你可以得到系统某个服务或server的性能瓶颈等.因此,将 ...
- Nginx日志管理(四)
Nginx日志对于统计.系统服务排错很有用.Nginx日志主要分为两种:access_log(访问日志)和error_log(错误日志).通过访问日志我们可以得到用户的IP地址.浏览器的信息,请求的处 ...
- Nginx日志管理配置
1.创建日志目录 nginx 的默认日志目录所在硬盘空间可能比较小,所以根据硬盘的空间状况创建日志目录 例如:mkdir /backup/nginx_logs 2.修改nginx配置文件 配置 ngi ...
- Nginx_地址重写(rewrite)_日志管理(log_format)_压缩输出_Nginx设定限速_Nginx设置反向代理及反向代理缓存
Nginx地址重写 Nginx rewrite rewrite语法规则1).变量名可以使用 "=" 或 "!=" 运算符~ 区分大小写~* 不区分大小写^~ 禁 ...
随机推荐
- 网站卡死,照惯例运行.bat批量处理文件进行重启不起作用
网站卡死,照惯例运行.bat批量处理文件进行重启不起作用,进入虚拟机控制台进行虚拟机重启仍然不起作用,通过ping分析物理服务器能ping通,各个虚拟机之前也能ping通,但是不能ping通外部,分析 ...
- JUnit使用Eclipse建立Test Suite - 就是爱Java
当JUnit有多个或所有的Test Case要执行,此时就需要Test Suite来管理众多的Test Case,利用Eclipse的整合开发环境,可以针对多个不相关的Test Case或Test S ...
- LeetCode_Restore IP Addresses
Given a string containing only digits, restore it by returning all possible valid IP address combina ...
- altium designer14的Import wizard 为空的解决方法
1.首先将安装盘放到光驱里面,如果是虚拟光驱安装,请运行iso文件. 2. 点击DXP-->>Externtion and updates 3. 出现下列界面,选择右面的configure ...
- Android 编程:calledfromWrongThreadException 的原因
子线程更新UI会发生Android.view.ViewRoot$CalledFromWrongThreadException异常的解决方法 子线程更新UI 显然假如你的程序需要执行耗时的操作的话,假如 ...
- java属性文件读取,属性修改
/** * 属性文件读取 * @author bestmata * */ public class CommUtil { private static Logger logger=Logger.get ...
- linux磁盘限额配置:quota命令
LINUX下也有类似WINDOWS NTFS所用的磁盘限额,用的是quota来实现通过rpm -q quota确定是否已安装用quota只能对patation做限额,要做到针对某个目录来做只能靠ln ...
- android ListView用法介绍
ListView在Android开发中是比较常用的组件,它是以列表的形式展示内容,并且还可以处理用户的选择与点击等操作: LIstView显示数据一般需要三方面: (1)ListView组件:用来展示 ...
- LinearLayout 和 RelativeLayout
共有属性: java代码中通过btn1关联次控件 android:id="@+id/btn1" 控件宽度 android:layout_width="80px" ...
- hdu4055 dp
http://acm.hdu.edu.cn/showproblem.php?pid=4055 Problem Description The signature of a permutation is ...