jenkins 安装部署项目,rabbitmq 安装、nginx 安装、ngix Lua脚本 redis 实现自动封禁高频率访问IP 笔记

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/awu_scanner/article/details/102742724

开发过程中一些工具的安装使用笔记。。。。。

一、jenkins 安装部署项目(码云为例Gitee):


参考:https://blog.csdn.net/shuizhihun07/article/details/80168076
1. 安装 jdk 、maven、git jenkins 并设置环境变量

2. 安装完成后启动:
   首次启动报如下错误:
    Starting Jenkins bash: /usr/bin/java: No such file or directory
    解决方法:
    添加java依赖:修改/etc/init.d/jenkins 配置文件,在candidates 第一行加上java的安装路径:如/home/jdk1.8.0_181/bin/java
   启动完成后访问到首页:首次登陆需要密匙:密匙位置命令:cat /var/lib/jenkins/secrets/initialAdminPassword
3.登陆完成后 可选择性安装相关插件

4.新建工程:maven工程

5.全局配置:
    系统管理-系统设置-SSH remote hosts(需要部署到的远程服务器信息)
    Gitee 配置:Gitee 域名 UR:https://gitee.com  证书令牌:获取token后填写

6.工程配置需要注意的地方:
    打包命令:clean install -Dmaven.test.skip=true
    ps:ps:-Dmaven.test.skip=true表示跳过测试单元-不编译不执行,-Ptest  test表示指定环境

    部署war包到远程Tomcat需要配置:
    1.Tomcat-conf下的Tomcat-users.xml 增加下面代码:
    <user username="tomcat_admin" password="tomcat_admin" roles="manager-gui,manager-script,tomcat,admin-gui,admin-script"/>
    username和password随意
    2.授权任何IP访问:更改/home/apache-tomcat-8.5.5/webapps/manager/META-INF  下的context.xml文件
    allow的值改为 "^.*$" 

7:常用命令:
    systemctl enable jenkins
    systemctl restart jenkins
 

二、rabbitmq 安装:

参考:https://www.jianshu.com/p/ce725e41edab

ps:安装活启动报如下错误处理:
    Transaction check error:
    file /usr/bin/epmd from install of erlang-erts-20.0-1.el7.centos.x86_64 conflicts with file from package esl-erlang-20.0-1.x86_64
    file /usr/bin/erl from install of erlang-erts-20.0-1.el7.centos.x86_64 conflicts with file from package esl-erlang-20.0-1.x86_64
    file /usr/bin/erlc from install of erlang-erts-20.0-1.el7.centos.x86_64 conflicts with file from package esl-erlang-20.0-1.x86_64
    file /usr/bin/escript from install of erlang-erts-20.0-1.el7.centos.x86_64 conflicts with file from package esl-erlang-20.0-1.x86_64
    file /usr/bin/run_erl from install of erlang-erts-20.0-1.el7.centos.x86_64 conflicts with file from package esl-erlang-20.0-1.x86_64
    file /usr/bin/to_erl from install of erlang-erts-20.0-1.el7.centos.x86_64 conflicts with file from package esl-erlang-20.0-1.x86_64
    file /usr/bin/dialyzer from install of erlang-dialyzer-20.0-1.el7.centos.x86_64 conflicts with file from package esl-erlang-20.0-1.x86_64
    file /usr/bin/ct_run from install of erlang-common_test-20.0-1.el7.centos.x86_64 conflicts with file from package esl-erlang-20.0-1.x86_64
    注意:出现这种情况,运行如下命令
    yum remove esl-erlang-20.0-1.x86_64 esl-erlang-20.0-1.x86_64 esl-erlang-20.0-1.x86_64 esl-erlang-20.0-1.x86_64 esl-erlang-20.0-1.x86_64 esl-erlang-20.0-1.x86_64 esl-erlang-20.0-1.x86_64 esl-erlang-20.0-1.x86_64

三、 nginx 安装 :

参考:https://blog.csdn.net/t8116189520/article/details/81909574

启动报错:
nginx: [error] open() "/usr/local/nginx/logs/nginx.pid" failed (2: No such file or directory)

解决:
执行命令/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf

启动命令:/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
重启命令:进入 cd /usr/local/nginx/sbin/
./nginx -s reload

四、nginx + Lua脚本 + redis 实现自动封禁高频率访问IP:

参考:https://blog.csdn.net/weixin_43112000/article/details/86650107

安装openresty/1.13.6.1  完成 并能正常启动访问后 编写lua脚本
在openresty 安装目录下的nginx目录下的conf目录下创建access.lua 文件,文件内容如下:

--脚本文件内容开始
local ip_block_time = 120  --封禁IP时间 单位:秒
local ip_time_out = 10 --指定IP访问频率时间段 单位:秒
local ip_max_count = 30 --指定IP访问频率计数最大值 单位:秒
local ret_code=200

local BUSINESS = ngx.var.business --nginx的location中定义的业务标识符,也可以不加,不过加了后方便区分 

local headers=ngx.req.get_headers()
local ip_addr=headers["X-REAL-IP"] or headers["X_FORWARDED_FOR"] or ngx.var.remote_addr
--ngx.var.remote_addr
--连接 Redis
local redis = require "resty.redis"
local conn = redis.new()
conn:set_timeout(3000) --超时时间 2秒
local ok, orr = conn:connect("127.0.0.1",6379)
if not ok then
    --ngx.say("failed to connect: ", err)
    goto FLAG
else
    --ngx.say("redis connetc success !!!")
    --身份验证 密码
    conn:auth("123cjdg19071702156")
end


--查询ip是否被禁止访问,如果存在则返回403错误代码
is_block, err = conn:get(BUSINESS.."_BLOCK_"..ip_addr)

if is_block == ngx.null then
    ret_code = 200
end

if is_block == '1' then
    --ngx.say("---封禁开始---", ngx.var.remote_addr)
    ret_code = 403
    conn:close()
    ngx.exit(403)
    --goto FLAG
end


--查询Redis中保存的IP的计数器
ip_count = conn:get(BUSINESS.."_COUNT_"..ip_addr)

if ip_count == ngx.null then --如果不存在,则将改IP存入Redis,并将计数器设置为1,该KEY的超时时间为ip_time_out
    res, err = conn:set(BUSINESS.."_COUNT_"..ip_addr,1)
    res, err = conn:expire(BUSINESS.."_C0UNT_"..ip_addr, ip_time_out)
    
else
    ip_count = ip_count + 1 --存在将访问次数加1
    if ip_count >= ip_max_count then --如果超过单位时间限制的访问次数,则添加限制访问标识,限制时间为ip_block_time
        res, err = conn:set(BUSINESS.."_BLOCK_"..ip_addr, 1)
        res, err = conn:expire(BUSINESS.."_BLOCK_"..ip_addr, ip_block_time)
    else
        res, err = conn:set(BUSINESS.."_COUNT_"..ip_addr, ip_count)
        res, err = conn:expire(BUSINESS.."_COUNT_"..ip_addr, ip_time_out)
    end
end

--此处 第一次设置缓存时失效时间未设置成功(具体原因未找到) 故用一下代码判断并设置失效时间
ip_ttl = conn:ttl(BUSINESS.."_COUNT_"..ip_addr)
if ip_ttl == '-1' or ip_ttl ==-1 then    
    conn:expire(BUSINESS.."_COUNT_"..ip_addr, ip_time_out)
end

--结束标记
::FLAG::
local ok, err = conn:close()
return ret_code

--脚本内容结束

脚本编写完成后配置nginx,在需要拦截的地方(server中的location 中配置)加入lua脚本,access_by_lua_file 后跟lua脚本的具体地址:
location /test {
    # proxy_set_header Host  $host;
    proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
    set $Real $http_x_forwarded_for;
    if ($Real ~ (\d+)\.(\d+)\.(\d+)\.(\d+),(.*)){
        set $Real $1.$2.$3.$4;
    }
    proxy_set_header        X-Real-IP       $Real;
    set $BUSINESS "LUA";
    access_by_lua_file /usr/local/openresty/nginx/conf/lua/access.lua;
    proxy_pass http://localhost:80;
}
配置 完成后 重启nginx即可。重启命令:nginx -s reload

ps:1、脚本中连接redis 的IP 和端口 根据自己的实际情况修改
    2、如果在安装openresty 之前 已经使用nginx了,将之前nginx的配置文件 复制到openresty 下的nginx的conf目录下 
       然后再做相关配置,如果之前nginx中有引入其他的文件,注意将文件也一并复制到相应地方或者修改 文件的指向路径
 

猜你喜欢

转载自blog.csdn.net/awu_scanner/article/details/102742724