linux 安装openresty并使用lua脚本转发鉴权

前言:实际开发中,用户上传的图片,我们需要对图片做保护措施,为了不让图片直接暴露在外网无差别的访问,图片服务器链接进行鉴权这个就显得尤为重要了

大致上分为三步骤,如果第一步已经配置,则可以忽略
1.配置yum源,方便安装openresty
2.安装openresty
3.编写鉴权lua脚本

1.配置yum源

1.1 将yum下载的rpm缓存下来(已备以后其他环境直接使用)
命令:vim /etc/yum.conf

cachedirrpm包存放位置(更改为希望保存的地址)

keepcache 下载完成后是否进行清理(更改为1)

debugleveldebug等级

logfile 日志文件存放位置

yum.conf配置信息

1.2 配置yum源文件
进入/etc/yum.reps.d/目录下,创建一个以 .repo结尾的文件
我这边创建一个163的yum源,把下边文件放入到163yum源文件截图对应的目录下即可

163yum源文件

CentOS7-Base-163.repo文件下载 提取密码:esjb
刷新配置:
yum clean all 清空本地的yum源缓存
yum repolist 重新生成元数据

2.安装openresty

2.1通过yum形式安装openresty

#执行命令
yum install yum-utils 
yum-config-manager --add-repo https://openresty.org/package/centos/openresty.repo 
yum install openresty 

期间有可能yum源安装失败,提示无法解析163yum源域名,此时需要配置linux的dns域名服务器
命令编辑:vim /etc/resolv.conf
添加内容:
nameserver 168.95.1.1
nameserver 221.130.33.52
保存退出

2.2安装成功后,则可以在/home/yumopenresty目录下,查看到openresty文件

openresty文件

2.3我这边安装成功后,做了一下备份,方便其他同学下载使用
openresty.tar文件下载 提取密码:cbva
2.4后续lua脚本会用到http网络请求函数,所以在/usr/local/openresty/lualib/resty默认路径下,添加http工具类,以供后期调用http函数

http工具类

httptool文件下载 提取密码:pc70

3.编写鉴权lua脚本

3.1 touch命令新增touch getimage.lua文件,编写lua脚本

--getimage.lua文件内容
--从header中获取token值
local headers = ngx.req.get_headers()
local token = headers["token"]
--判断token是否为空,为空则直接400
if not token
then
ngx.exit(400)
end

local http = require "resty.http"
local httpc = http.new()
local url = "http://换成你自己请求的地址?Authorization="..token
local resStr="false" --响应结果
local res, err = httpc:request_uri(url, {
    method = "GET",
    headers = {
        ["Content-Type"] = "application/json",
    }
})
--判断接口返回结果状态
if not res then
    ngx.log(ngx.WARN,"failed to request: ", err)
   ngx.exit(401)
end
--请求之后,状态码
ngx.status = res.status
if ngx.status ~= 200 then
    ngx.log(ngx.WARN,"非200状态,ngx.status:"..ngx.status)
      ngx.exit(402)
end

--响应的内容 如果结果用户id存在,则重定向图片服务器
resStr = res.body
if resStr ~= "false"
        then
--      ngx.log(ngx.ERR,"failed to request: ")
        return
        else
        ngx.exit(403)
end

3.2 配置nginx
/etc/nginx/lua/getimage.lualua文件地址,nginx触发转发前,去lua脚本文件鉴权,通过成功,则转发 proxy_pass http://127.0.0.1:7000/; 地址

    server {
        listen       9000;
        server_name  localhost;
        client_max_body_size 10m;
         location /busvapp/image/ {
          #日志地址
            access_log  /var/log/nginx/openrestyimage.access.log  main; 
          #错误日志地址
            error_log   /var/log/nginx/openrestyimage.error.log error;
            lua_code_cache off; #热部署,每次修改lua文件,不用重新加载部署
            rewrite_by_lua_file /etc/nginx/lua/getimage.lua;
            proxy_pass   http://127.0.0.1:7000/;       
        }   
        }

3.3 启动openresty

#启动命令
usr/local/openresty/nginx/sbin/nginx -c /usr/local/openresty/nginx/conf/nginx.conf`
#建立软链接,为openresty下的nginx建立软链(非必需)
ln -s /usr/local/openresty/nginx/sbin/nginx  /usr/sbin/nginx
#如果此前有其他版本nginx已经占用了软链接,则我们可以修改刷新软链接
语法:ln –snf  [新的源文件或目录]  [目标文件或目录]
ln -snf /usr/local/openresty/nginx/sbin/nginx  /usr/sbin/nginx
#建立完软链接,快速启停
#启动
service nginx start 
#停止
service nginx stop
#重启
service nginx restart

查看nginx版本信息是否是openresty,命令:nginx -V

openresty版本信息

至此,我们的图片鉴权服务就做好了

后期 如果我们想把openresty服务拷贝到其他服务器上的话,很简单,只需要把openresty.tar包解压,进入到packages文件夹

#命令安装rpm包,即可
rpm -ivh openresty-zlib-1.2.11-3.el6.x86_64.rpm
rpm -ivh openresty-pcre-8.44-1.el6.x86_64.rpm
rpm -ivh openresty-openssl111-1.1.1g-3.el6.x86_64.rpm
rpm -ivh openresty-1.17.8.2-1.el6.x86_64.rpm
openresty的rpm安装包

你可能感兴趣的:(linux 安装openresty并使用lua脚本转发鉴权)