通过实测证明:将WAF部署在Nginx之后,效率可能会低很多,如果WAF功能允许,甚至可直接替换Nginx位置。


Nginx是一款口碑非常不错的反向代理、负载均衡服务器。据说并发支持可达5万。
在部署WAF时经常使用,常见的一种网络结构是:Nginx在最前端,做为反向代理、负载均衡,Nginx后方,是业务服务器集群。

将WAF部署在Nginx之后,真的效率最高吗?


本文通过实际测试,验证这种方法是否高效、有多少RPS性能损失。如果数据不是指向Nginx,而是指向WAF本身,性能又是如何。

系统:Windows
测试使用:Nginx、ShareWAF(官网:http://www.sharewaf.com/)、ab
测前准备:使用www.test.com域名,已修改host进行本地解析。
其它:Nginx装在一台电脑上,ShareWAF装在另一台电脑(ip:192.168.1.19),两台电脑配置均不高。

1、Nginx配置如下:

3个负载均衡指向:
将WAF部署在Nginx之后,真的效率最高吗?


未使用负载均衡,只做反向代理:

将WAF部署在Nginx之后,真的效率最高吗?


测试时,Nginx会分别使用这两种配置方式。

2、
使和ab工具进行测试,
ab -c100 -n100 http://www.test.com/
(已修改host,www.test.com指向127.0.0.1,即本机Nginx,Nginx转发数据到WAF)

测试结果如下:

将WAF部署在Nginx之后,真的效率最高吗?


3、
使用ab直接指向WAF,不经Nginx:

将WAF部署在Nginx之后,真的效率最高吗?



4、结论说明:
ab连nginx,RPS为36左右;
ab直接连WAF,RPS为86左右;
使用Nginx做负载或反向代理,RPS性能降低50%以上。

那么,
如果在接入WAF之前,是用Nginx做的负载均衡或反向代理,后面接的是业务服务器。
在接入WAF时,如果能直接跳过Nginx,效率最高。即作WAF取代nginx,比如上面测试的ShareWAF是具备这个功能的,可以取代Nginx。