Modsecurity 日志写入redis
1、要写入redis,机器上必须要安装有redis服务器。nginx+modsecurity的error.log和modsec_audit.log 原来都是写文件的因为频繁写入文件会造成nginx引擎性能下降(大流量测试流量存在瓶颈),故采用audit日志写入redis的方式。
该功能修改了modsecurity下的3个源文件。
1 | modsecurity/standalone/api.c |
2、redis安装
1 | unzip redis-3.2.3.tar.gz |
1 | mkdir -p /var/log/redis |
1 | /usr/local/redis/bin/redis-server /usr/local/redis/etc/redis.conf |
1 | vi /etc/rc.local |
redis版本2.XX,在使用过程中有redis占用内存持续增大至过大等问题。
故使用为3.XX,升级过程稍微有些区别。
Modsecurity audit日志写入redis,最重要的是使用了redis数据库一个轻量的C语言客户端库Hiredis。
3、hiredis 安装
1 | unzip hiredis-master.zip |
4、hiredis 是以动态链接库的形式存在,所以必须要编译进nginx才可以。为此增加了一个nginx的编译选项(configure中加入编译选项)
1 | --with-cust-ld-opt="-lhiredis" |
以后在编译nginx的时候如果要加入redis功能需要更改make和options文件。
1 | nginx-1.8.1/auto/make |
写日志进redis采用的是Redis 发布订阅的消息通信模式. 发送者(pub)发送消息,订阅者(sub)接收消息.
Redis 客户端可以订阅任意数量的频道,nginx引擎写入的客户端频道名为:nginx
采用客户端连上redis服务器后,可采用SUBSCRIBE nginx 等待接收消息。
modsecurity_redis_log.png