nginx rwrite及增加不记录特定状态日志nginx模块

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了nginx rwrite及增加不记录特定状态日志nginx模块相关的知识,希望对你有一定的参考价值。

需求:访问log.ckl.com/q.gif 成功,其他路径则返回404,且404不记录日志

第一步,配置nginx rewrite

1.配置nginx rewrite

server {
    listen       8000;
    server_name log.ckl.com;
    #index q.gif;
    root /app/data/qm_log;
    
#如果url不是q.gif,则返回404
    if ($uri !~ ^/q.gif) {
        return 404;
    }
    location ~* .*\.(jpg|jpeg|gif|png|bmp)$ {
        expires 30d;
        break;
    }
    error_log /app/data/log/nginx/www.error.log;
}

2.重启nginx

/etc/init.d/nginx restart

3.测试访问

访问正确路径

curl http://log.ckl.com/q.gif

日志:

192.168.1.11 - - [31/May/2016:13:56:47 +0800] "GET /q.gif HTTP/1.1" 200 43 "-" "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (Khtml, like Gecko) Chrome/49.0.2623.75 Safari/537.36" - 968 1464674207.162 7 0.000
192.168.1.11 - - [31/May/2016:13:56:47 +0800] "GET /q.gif HTTP/1.1" 304 0 "-" "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.75 Safari/537.36" - 1048 1464674207.736 8 0.000

访问错误路径:

curl http://log.ckl.com/c.gif

日志:

192.168.1.11 - - [31/May/2016:13:48:33 +0800] "GET / HTTP/1.1" 404 564 "-" "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.75 Safari/537.36" - 1068 1464673713.147 8 0.000


第二步,nginx 404不记录日志

1.下载模块

地址:https://github.com/cfsego/ngx_log_if


2.用法样例:

server {
    access_log_bypass_if ($status = 400);
    access_log_bypass_if ($host ~* ‘nolog.com‘);
    access_log_bypass_if ($uri = ‘status.nginx‘) and;
    access_log_bypass_if ($status = 200);
}
In the case, nginx will not write access log when the status code is 400, or when the host is ‘nolog.com‘, or when the uri is ‘status.nginx‘ and the status code is 200.
However, if you define them both in the blocks in the father child relationship, the child block will not inherit and merge the configuration in parent block, of course. FOr example:
server {
    access_log_bypass_if ($status = 400);
    location / {
        access_log_bypass_if ($host ~* ‘nolog.com‘);
    }
}

3.解压下载文件

cd /tmp/soft/
unzip ngx_log_if-master.zip

4.重新编译nginx,不覆盖编译

cd /tmp/soft/nginx-1.9.14
 ./configure  --prefix=/app/local/nginx --pid-path=/app/local/nginx --user=nginx --group=nginx --with-threads --with-file-aio --with-http_ssl_module --with-http_v2_module  --with-http_addition_module --with-http_sub_module --with-http_dav_module --with-http_flv_module --with-http_mp4_module --with-http_perl_module --with-mail --with-http_gzip_static_module --with-http_auth_request_module  --with-http_random_index_module --with-http_secure_link_module --with-http_degradation_module --with-http_slice_module --with-http_stub_status_module --with-http_perl_module --with-zlib=/tmp/soft/zlib-1.2.8 --with-stream --with-stream_ssl_module --with-pcre=/tmp/soft/pcre-8.37 --with-openssl=/tmp/soft/openssl-1.0.2 --with-libatomic --add-module=/tmp/soft/ngx_log_if-master
make

备份原文件及拷贝新生成文件:

 mv /app/local/nginx/sbin/nginx /app/local/nginx/sbin/nginx.bak
 cp ./objs/nginx /app/local/nginx/sbin/

5.查看模块

# /app/local/nginx/sbin/nginx -V
nginx version: nginx/1.9.14
built by gcc 4.4.7 20120313 (Red Hat 4.4.7-17) (GCC) 
built with OpenSSL 1.0.2 22 Jan 2015
TLS SNI support enabled
configure arguments: --prefix=/app/local/nginx --pid-path=/app/local/nginx --user=nginx --group=nginx --with-threads --with-file-aio --with-http_ssl_module --with-http_v2_module --with-http_addition_module --with-http_sub_module --with-http_dav_module --with-http_flv_module --with-http_mp4_module --with-http_perl_module --with-mail --with-http_gzip_static_module --with-http_auth_request_module --with-http_random_index_module --with-http_secure_link_module --with-http_degradation_module --with-http_slice_module --with-http_stub_status_module --with-http_perl_module --with-zlib=/tmp/soft/zlib-1.2.8 --with-stream --with-stream_ssl_module --with-pcre=/tmp/soft/pcre-8.37 --with-openssl=/tmp/soft/openssl-1.0.2 --with-libatomic --add-module=/tmp/soft/ngx_log_if-master

新的模块以及生效


6.增加ninx 404状态不记录日志

server {
    listen       8000;
    server_name log.ckl.com;
    #index q.gif;
    root /app/data/qm_log;
    access_log_bypass_if ($status = 404);
	
    if ($uri !~ ^/q.gif) {
        return 404;
    }

    location ~* .*\.(jpg|jpeg|gif|png|bmp)$ {
        expires 30d;
        break;
    }

    error_log /app/data/log/nginx/www.error.log;
}

7.重启nginx进程

/etc/init.d/nginx restart

8.再次访问错误路径,发现404以及不记录

tailf /app/data/log/nginx/access.log

本文出自 “深呼吸再出击” 博客,请务必保留此出处http://ckl893.blog.51cto.com/8827818/1784810

以上是关于nginx rwrite及增加不记录特定状态日志nginx模块的主要内容,如果未能解决你的问题,请参考以下文章

nginx日志的配置及切割

Nginx访问日志 Nginx日志切割 静态文件不记录日志和过期时间

Nginx日志过滤 使用ngx_log_if不记录特定日志

nginx监控及lnmp架构

Nginx访问日志日志切割静态文件不记录日志和过期时间

Nginx虚拟主机配置Nginx的Rwrite配置