前言:实际开发中,用户上传的图片,我们需要对图片做保护措施,为了不让图片直接暴露在外网无差别的访问,图片服务器链接进行鉴权这个就显得尤为重要了
大致上分为三步骤,如果第一步已经配置,则可以忽略
1.配置yum源,方便安装openresty
2.安装openresty
3.编写鉴权lua脚本
1.配置yum源
1.1 将yum下载的rpm缓存下来(已备以后其他环境直接使用)
命令:vim /etc/yum.conf
cachedir
rpm包存放位置(更改为希望保存的地址)
keepcache
下载完成后是否进行清理(更改为1)
debuglevel
debug等级
logfile
日志文件存放位置
1.2 配置yum源文件
进入/etc/yum.reps.d/
目录下,创建一个以 .repo
结尾的文件
我这边创建一个163的yum源,把下边文件放入到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
文件
2.3我这边安装成功后,做了一下备份,方便其他同学下载使用
openresty.tar文件下载 提取密码:cbva
2.4后续lua脚本会用到http网络请求函数,所以在/usr/local/openresty/lualib/resty
默认路径下,添加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.lua
lua文件地址,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.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安装包
网友评论