当我们使用的是购买的云服务器时,上面有时会自带Nginx服务,或者项目中我们为图方便,使用yum安装Nginx服务,使用起来快捷方便。当我们需要为Nginx新增模块时,就遇到了麻烦,以笔者遇到的问题为例- 本人使用的是云服务器,上面有yum安装好的Nginx-1.12.2,当前的项目需要防止CC攻击,遂决定为Nginx添加ngx_lua_waf防护,添加此防护需要为Nginx添加lua模块,为Nginx添加模块需要重新编译Nginx,找不到configure无法编译。

  解决办法: 

  1.查看Nginx版本及已有模块,nginx -V

    

nginx 启动后没有我配置的对应的监听端口 nginx没有configure如何编译_lua

  2.下载解压和yum安装的Nginx同版本Nginx文件,wget http://nginx.org/download/nginx-1.12.2.tar.gz,tar xzvf nginx-1.12.2.tar.gz

  3.下载需要加载的模块:

    1)下载解压ngx_devel_kit,wget https://github.com/simpl/ngx_devel_kit/archive/v0.3.0.tar.gz,tar xzvf v0.3.0.tar.gz

    2)下载解压lua-nginx-module,wget https://github.com/openresty/lua-nginx-module/archive/v0.10.11.tar.gz,tar xzvf v0.10.11.tar.gz

    3)下载加压编译安装luajit,wget http://luajit.org/download/LuaJIT-2.0.5.tar.gz,tar xzvf LuaJIT-2.0.5.tar.gz,cd LuaJIT-2.0.5/,make,make install

      3-1)设置环境变量,vim /etc/profile,source /etc/profile

      

nginx 启动后没有我配置的对应的监听端口 nginx没有configure如何编译_运维_02

  4.重新编译Nginx,此处需要注意,编译的时候之前Nginx所有的模块也需要写在编译命令中,不然会丢失之前的模块,编译的时候,根据第1步查到已有的模块,加上本次需新增的模块即可--add-module,注意模块所在位置根据你下载解压的位置填写,到下载解压的Nginx文件下:

      

nginx 启动后没有我配置的对应的监听端口 nginx没有configure如何编译_linux_03

    1),编译过程中可能会报错缺少依赖,根据报错依次添加相应依赖即可:

      1-1),错误:./configure: error: the invalid value in --with-ld-opt="-Wl,-rpath,/usr/local/lib",解决:yum -y install redhat-rpm-config.noarch

      1-2),错误:./configure: error: the HTTP rewrite module requires the PCRE library,解决: yum -y install pcre pcre-devel

      1-3),错误:./configure: error: SSL modules require the OpenSSL library,解决:yum -y install openssl openssl-devel

      1-4),错误:./configure: error: the HTTP XSLT module requires the libxml2/libxslt,解决:yum -y install libxml2 libxml2-dev libxslt-devel

      1-5),错误:./configure: error: the HTTP image filter module requires the GD library,解决:yum -y install gd-devel

      1-6),错误:./configure: error: perl module ExtUtils::Embed is required,解决:yum -y install perl-devel perl-ExtUtils-Embed

      1-7),错误:./configure: error: the GeoIP module requires the GeoIP library,解决:yum -y install GeoIP GeoIP-devel GeoIP-data

      1-8),错误:./configure: error: the Google perftools module requires the Google perftools,解决:yum install gperftools-devel

    2)编译完成接着执行make,注意make完不要make install。编译完成后回再当前Nginx目录下objs文件下出现nginx可执行文件。

  5.替换Nginx可执行文件,可以先保存一份之前,防止错误无法恢复。mv /usr/sbin/nginx /usr/sbin/nginx.bak,cp objs/nginx /usr/sbin/,此时新模块就加载完了。

6.下载ngx_lua_waf,配置Nginxwaf防护相关,wget https://github.com/loveshell/ngx_lua_waf/archive/v0.7.2.tar.gz,tar xzvf v0.7.2.tar.gz,mv ngx_lua_waf-0.7.2/ waf, vim waf/config.lua编辑防护配置。
  --规则存放目录
   RulePath = "/etc/nginx/waf/wafconf/"
   --是否开启攻击信息记录,需要配置logdir
   attacklog = "on"
   --log存储目录,该目录需要用户自己新建,切需要nginx用户的可写权限
   logdir = "/var/log/nginx/waflog/"
   --是否拦截url访问(如果你用了phpmyadmin,开启此项会有问题)
   UrlDeny="on"
   --是否拦截后重定向
   Redirect="on"
   --是否拦截cookie攻击
   CookieMatch="on"
   --是否拦截post攻击(可能会导致上传功能异常)
   postMatch="on" 
   --是否开启URL白名单
   whiteModule="on" 
   --填写不允许上传文件后缀类型
   black_fileExt={"php"}
   --ip白名单,多个ip用逗号分隔
   ipWhitelist={"127.0.0.1"}
   --ip黑名单,多个ip用逗号分隔
   ipBlocklist={}
   --是否开启拦截cc攻击
   CCDeny="on"
   --设置cc攻击频率,单位为秒.默认1分钟同一个IP只能请求同一个地址100次
   CCrate="100/60"
   --警告内容,可在中括号内自定义 备注:不要乱动双引号,区分大小写
   html=[[  7.在nginx.conf的http字段内添加以下内容,启动Nginx,即开启防护.
    lua_package_path "/etc/nginx/waf/?.lua";
     lua_shared_dict limit 10m;
     init_by_lua_file /etc/nginx/waf/init.lua;
     access_by_lua_file /etc/nginx/waf/waf.lua;8.service nginx start