一、概述
部分情况下,需要对有疑问的ip进行限制隔离,或者限制部分无效流量。例如抢购商品,当商品抢完后,剩余的流量访问不到服务端,在网络层拦截返回商品售完,或对恶意的ip地址进行拦截,拒绝访问等。
限制ip访问有很多方式,包括系统自身的防火墙,服务端校验等,这里是使用Nginx通过lua插件读取配置在redis中的ip黑名单,Nginx拦截请求进行校验ip是否被限制访问。
本文使用OpenResty的lua-resty-redis模块使用Nginx访问redis。OpenRestys类似一个全家桶,是一个通过lua扩展Nginx功能的插件,OpenResty 最新版本1.15.8.1的下载地址:http://openresty.org/cn/ann-1015008001.html。 由于安装环境的nginx为1.8,所以这里下载了1.13.6.2版本安装。 OpenResty 里面有操作redis和mysql的插件。如下图
二、安装
linux环境已经安装了Nginx1.8版本,所以这里只安装openresty.
- 下载解压
wget https://github.com/openresty/openresty/releases/download/v1.13.6.2/openresty-1.13.6.2.tar.gz
tar -xvf openresty-1.13.6.2.tar.gz
cd openresty-1.13.6.2
- 编译安装
./configure -j2
make
make install
- 安装lua
openresty解压后的安装包里面的bundle文件夹
cd openresty-1.13.6.2/bundle/LuaJIT-2.1-20180420/
make
make install
安装完成后配置环境变量,向/etc/profile文件中添加一下内容
# tell nginx's build system where to find LuaJIT 2.0:
export LUAJIT_LIB=/usr/local/openresty/luajit/lib
export LUAJIT_INC=/usr/local/openresty/luajit/include/luajit-2.1/
更新环境变量source /etc/profile
- 编译配置Nginx
linux环境已经安装了Nginx1.8版本,所以只需要重新编译Nginx然后替换安装文件sbin里的nginx文件夹即可。找到Nginx1.8版本之前的原安装文件,重新编译nginx
./configure --prefix=/usr/local/nginx --with-cc-opt=-O2 --add-module=/usr/local/o