Nginx记录分析响应慢的请求及替换网站响应内容的配置

nginx记录分析网站响应慢的请求(ngx_http_log_request_speed)
nginx模块ngx_http_log_request_speed可以用来找出网站哪些请求很慢,针对站点很多,文件以及请求很多想找出哪些请求比较慢的话,这个插件非常有效.作者的初衷是写给自己用的,用来找出站点中处理时间较长的请求, 这些请求是造成服务器高负载的很大根源. 日志记录之后,在使用perl脚本分析日志,即可知道哪些请求需要修正.
1. 模块安装
nginx第三方模块安装方法这里就一笔略过了。
配置参数

./configure --prefix=/usr/local/nginx-1.4.1 --with-http_stub_status_module \
 --add-module=../ngx_http_log_request_speed

2. 指令log_request_speed
2.1 log_request_speed_filter
语法:

 log_request_speed_filter [on|off]

配置段: n/a
context: location, server, http
启动或禁用模块
2.2 log_request_speed_filter_timeout
语法:

log_request_speed_filter_timeout [num sec]

默认: 5秒
配置段: location, server, http
这边并不是真正意义的超时,而是说当请求超过这边给定的时间,将会记录到nginx错误日志中. 默认值是5000微秒(5秒),如果一个请求小于5秒,这个请求不会被记录到日志中,但是如果超过5秒,那请求将会被记录到nginx的错误日志中
3. 使用实例
3.1 nginx配置

http{
   log_request_speed_filter on;
   log_request_speed_filter_timeout 3;
   ...
}

错误日志中记录的慢请求如下

3.2 日志分析

cd /usr/local/nginx-1.4.1/logs
wget http://wiki.nginx.org/images/a/a8/Log_Analyzer.tar.gz
tar -xzvf Log_Analyzer.tar.gz
cd request_speed_log_analyzer
# cat ../error.log | grep 'process request'| ./analyzer.pl -r
POST /wp-admin/admin-ajax.php HTTP/1.1 --- avg ms: 1182, value count: 2
GET /shmb/1145.html HTTP/1.1 --- avg ms: 2976, value count: 1 <--- THE WINNER

从日志中,我们发现这边有2条请求比较慢,最慢的是/shmb/1145.html ,而且还标示“THE WINNER”,作者你赢了。很幽默。
3.3 分析脚本语法

# ./analyzer.pl -h
  • -h : this help message # 显示帮助信息
  • -u : group by upstream # 按upstream分组
  • -o : group by host # 按主机分组
  • -r : group by request # 按请求分组,推荐这个

4. nginx测试版本

目前作者只在0.6.35和0.7.64下测试,不保证其他环境下可以使用。我当前的测试版本是1.4.1,目前使用正常,在使用前请大家先测试一下。

nginx替换网站响应内容(ngx_http_sub_module)
ngx_http_sub_module模块是一个过滤器,它修改网站响应内容中的字符串,比如你想把响应内容中的‘jb51'全部替换成‘我们',这个模块已经内置在nginx中,但是默认未安装,需要安装需要加上配置参数:--with-http_sub_module
1.指令(Directives)
语法:

sub_filter string replacement;

默认值:     —
配置段:     http, server, location
设置需要使用说明字符串替换说明字符串.string是要被替换的字符串,replacement是新的字符串,它里面可以带变量。
语法:

sub_filter_last_modified on | off;

默认值: sub_filter_last_modified off;
配置段:     http, server, location
这个指令在nginx 1.5.1中添加,我这个版本没有,可以忽略掉.
Allows preserving the “Last-Modified” header field from the original response during replacement to facilitate response caching.
By default, the header field is removed as contents of the response are modified during processing.
语法:

 sub_filter_once on | off;

默认值: sub_filter_once on;
配置段: http, server, location
字符串替换一次还是多次替换,默认替换一次,例如你要替换响应内容中的jb51为我们,如果有多个jb51出现,那么只会替换第一个,如果off,那么所有的jb51都会 被替换
语法:

 sub_filter_types mime-type ...;

默认值: sub_filter_types text/html;
配置段: http, server, location
指定需要被替换的MIME类型,默认为“text/html”,如果制定为*,那么所有的
2. nginx替换字符串实例
2.1 配置

server {
  listen    80;
  server_name www.jb51.net;

  root /data/site/www.jb51.net;  

  location / {
    sub_filter jb51 '我们';
    sub_filter_types text/html;
    sub_filter_once on;
  }
}

2.2 测试
内容如下

# cat /data/site/www.jb51.net/2013/10/20131001_sub1.html
welcome to jb51!
jb51 TEAM!

访问结果

# curl www.jb51.net/2013/10/20131001_sub1.html     
welcome to 我们!
jb51 TEAM!

我们可以看到它替换是不区分大小写的,而且jb51只被替换了一次。我把sub_filter_once on改成off试试。

location / {
  sub_filter jb51 '我们';
  sub_filter_once off;
}

接着测试

# curl www.jb51.net/2013/10/20131001_sub1.html
welcome to 我们!
我们 TEAM!

我们可以看到jb51都被替换掉了.
例如你想在</head>后追加一段js,配置如下:

location / {
  sub_filter   </head> '</head><script language="javascript" src="$script"></script>';
  sub_filter_once on;
}

这边我就不再做测试了,大家可以测试一下.

(0)

相关推荐

  • Nginx静态文件响应POST请求 提示405错误的解决方法

    例1:用linux下的curl命令发送POST请求给Apache服务器上的HTML静态页 复制代码 代码如下: [root@localhost ~]# curl -d 11=1 http://www.jb51.net/index.html    <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">   <HTML>       <HEAD>           <TITLE>405 Meth

  • Nginx记录分析响应慢的请求及替换网站响应内容的配置

    nginx记录分析网站响应慢的请求(ngx_http_log_request_speed) nginx模块ngx_http_log_request_speed可以用来找出网站哪些请求很慢,针对站点很多,文件以及请求很多想找出哪些请求比较慢的话,这个插件非常有效.作者的初衷是写给自己用的,用来找出站点中处理时间较长的请求, 这些请求是造成服务器高负载的很大根源. 日志记录之后,在使用perl脚本分析日志,即可知道哪些请求需要修正. 1. 模块安装 nginx第三方模块安装方法这里就一笔略过了. 配

  • IIS&Apache 攻击记录分析篇

    在这里,我为大家介绍一下两种常见的网页服务器中最重要的记录文件,分析服务器遭到攻击后,黑客在记录文件中会留下什么记录.目前最常见的网页服务器有两种:Apache和微软的Internet Information Server(简称IIS),这两种服务器都有一般版本和SSL认证版本.本文将使用和现实黑客的攻击手段类似的攻击方法去测试服务器并分析相关文件,有条件的朋友可在自己的机器上测试. IIS的预设记录文件地址在C:\winnt\system32\logfiles\w3svc1目录下,文件名是当天

  • JVM完全解读之GC日志记录分析

    相信大家在系统学习jvm的时候都会有遇到过这样的问题,散落的jvm知识点知道很多,但是真正在线上环境遇到一些莫名其妙的gc异常时候却无从下手去分析. 关于这块的苦我也表示能够理解,之前光是JVM相关的八股文就整理了许多,但是经常是不知道如何在实战中使用.最近也尝试在模拟一些案例来训练自己的JVM相关知识,本文特意记录下这段调优经历. Java应用的GC评估 可能大多数程序员在开发完某个需求之后,往线上环境一丢,然后就基本不怎么关注后续的变化了.但是是否有考虑过,这些新引入的代码会对原有系统造成的

  • j2Cache线上异常排查问题解决记录分析

    目录 问题背景 问题分析 假设问题 小心求证 问题重现 问题解决 问题后记-下面才是真正的原因 重新假设 最终解决 问题背景 开发反馈,线上有个服务在运行一段时间后,就会抛异常导致redis缓存不可用.项目使用了j2Caceh,异常是j2Cache的RedisCacheProvider抛出来的,如: Exception in thread "main" redis.clients.jedis.exceptions.JedisException: Could not get a reso

  • python通过get,post方式发送http请求和接收http响应的方法

    本文实例讲述了python通过get,post方式发送http请求和接收http响应的方法.分享给大家供大家参考.具体如下: 测试用CGI,名字为test.py,放在apache的cgi-bin目录下: #!/usr/bin/python import cgi def main(): print "Content-type: text/html\n" form = cgi.FieldStorage() if form.has_key("ServiceCode") a

  • SQLServer2000 报1053错误(服务没有及时响应或控制请求)的解决方法

    今天启动SQLServer2000时报1053错误 错误如下所示: 发生错误 1053-(服务没有及时响应或控制请求.),此时正在 MSSQLServer 服务上执行该服务操作. 我立即上网查找相关信息,看见有人说是更改windows用户密码后便出现此类问题,但说得都不是很明白,所以自己想总结一下. 打开管理工具中的"服务",找到MSSQLSERVER,右键属性,在登录下面选择此帐户,然后点浏览,在高级里面点立即查找,选择您登录的用户,最后输入此用户的密码. 大功告成!可以继续用SQL

  • 原生javascript的ajax请求及后台PHP响应操作示例

    本文实例讲述了原生javascript的ajax请求及后台PHP响应操作.分享给大家供大家参考,具体如下: <!doctype html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> </head> <body> <table id="t">

  • 如何利用nginx通过正则拦截指定url请求详解

    nginx服务器 nginx是非常出色web服务器,对于静态文件的处理非常高效,同时它的代理转发功能和其它后台服务器搭配起来也非常的简单高效. location 我们知道nginx会对请求进行解析,然后回得到关于请求的url等信息,我们只需要对url进行匹配,然后拦截即可. 匹配规则 location / { if ($request_uri ~* ^/\?http(.*)$) { return 404; } } 经过这样的匹配,我们就可以拦截所有请求根目录的网址并且参数为?httpxxx类似的

  • nginx 多个location转发任意请求或访问静态资源文件的实现

    本文主要介绍了nginx 多个location转发任意请求或访问静态资源文件的实现,分享给大家,具体如下: server { #监听的端口 listen 80; #监听的域名 server_name localhost; #监听带后缀的url location ^~\.txt { #文件放到/html文件夹下 root /; } #监听所有url,没有特殊需求就用这一个location就够了 #使用通配符只有在没有匹配上其他location的情况下会进入 location / { #去掉了只有u

  • web.xml中Maven占位符不生效问题记录分析

    目录 问题背景 问题分析 Resources插件有三个目标: 问题定位 问题解决 问题背景 开发反馈,一个spring mvc的web项目,在web.xml配置的占位符不生效,编译后还是没有替换成配置的属性,如下: <context-param> <param-name>logbackConfigLocation</param-name> <param-value>classpath:${loagback.xml.path:logback.xml}</

随机推荐