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

 更新时间:2016年01月28日 09:44:20   投稿:goldensun  
这篇文章主要介绍了Nginx记录分析响应慢的请求及替换网站响应内容的配置,分别用到了ngx_http_log_request_speed模块和ngx_http_sub_module模块,需要的朋友可以参考下

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;
   ...
}

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

201612894131459.jpg (620×115)

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;
}

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

相关文章

  • Nginx可视化nginxWebUI的具体使用

    Nginx可视化nginxWebUI的具体使用

    NginxWebUI 是一款图形化管理 nginx 配置的工具,可以使用网页来快速配置 nginx单机与集群的各项功能,本文就来介绍一下Nginx网页配置工具nginxWebUI的具体使用,感兴趣的可以了解一下
    2023-08-08
  • SpringBoot前端后端分离之Nginx服务器下载安装过程

    SpringBoot前端后端分离之Nginx服务器下载安装过程

    Nginx是一款轻量级的Web服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,这篇文章主要介绍了SpringBoot前端后端分离之Nginx服务器,需要的朋友可以参考下
    2022-08-08
  • nginx实现发布静态资源的方法

    nginx实现发布静态资源的方法

    这篇文章主要介绍了nginx实现发布静态资源的方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-01-01
  • Nginx添加ngx-fancyindex模块的方法

    Nginx添加ngx-fancyindex模块的方法

    这篇文章主要介绍了Nginx添加ngx-fancyindex模块的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-06-06
  • nginx返回json或者文本格式的方法

    nginx返回json或者文本格式的方法

    下面小编就为大家分享一篇nginx返回json或者文本格式的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-03-03
  • Nginx配置之main events块使用示例详解

    Nginx配置之main events块使用示例详解

    这篇文章主要为大家介绍了Nginx配置之main events块使用示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-11-11
  • 如何在centos7中安装nginx

    如何在centos7中安装nginx

    近期做项目用到了nginx,所以自己动手来在Centos7上安装nginx,以下是安装步骤。
    2018-09-09
  • Nginx跨域使用字体文件的配置方法

    Nginx跨域使用字体文件的配置方法

    这篇文章主要介绍了Nginx跨域使用字体文件的配置方法,使用HttpHeadersModule模块实现,需要的朋友可以参考下
    2014-06-06
  • Nginx DNS resolver配置实例

    Nginx DNS resolver配置实例

    这篇文章主要介绍了Nginx DNS resolver配置实例,本文讲解在proxy_pass 和 upstream server 通信的时候需要手动指定 resolver,本文就给出了配置实例,需要的朋友可以参考下
    2015-01-01
  • nginx中一个请求的count计数跟踪浅析

    nginx中一个请求的count计数跟踪浅析

    这篇文章主要给大家介绍了关于nginx中一个请求的count计数跟踪的相关资料,文中通过实例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2022-01-01

最新评论