验证 Openresty+Lua+GraphicsMagick

1 环境准备

1.1 CentOS 安装 Openresty

Openresty 的下载及安装请参考:http://openresty.org/cn/

1.2 安装 GraphicsMagick

源码安装,源码下载地址:https://sourceforge.net/projects/graphicsmagick/

源码下载后解压,切换到源码目录:

./configure
make
make install

2 测试代码

代码参考:(linsir/ngx-lua-images)[https://github.com/linsir/ngx-lua-images]

2.1 nginx 配置

# 设置默认 lua 搜索路径,添加 lua 路径
    lua_package_path "/usr/local/share/lua/5.1/?.lua;/usr/local/openresty/ngx-lua-images/lua_tmp/?.lua;;";

    gzip            on;
    gzip_min_length 1000;
    gzip_types text/xml text/css application/javascript;

    server {
        listen 8000;
        charset utf-8;
        server_name localhost;
        default_type text/plain;
        root /usr/local/openresty/ngx-lua-images/;

        set $app_path "/usr/local/openresty/ngx-lua-images/";

        location /proxy/ {
            internal;
            set_unescape_uri $date $arg_date;
            set_unescape_uri $auth $arg_auth;
            set_unescape_uri $file $arg_file;
            set_unescape_uri $mime $arg_mime;

            proxy_pass_request_headers off;
            more_clear_headers ‘Host‘;
            more_clear_headers ‘Connection‘;
            more_clear_headers ‘Content-Length‘;
            more_clear_headers ‘User-Agent‘;
            more_clear_headers ‘Accept‘;

            proxy_set_header Date $date;
            proxy_set_header Authorization $auth;
            proxy_set_header content-type $mime;
            # proxy_set_header x-amz-acl ‘public-read‘;
            proxy_set_header Content-MD5 ‘‘;

            proxy_read_timeout 1s;
            proxy_send_timeout 1s;
            proxy_connect_timeout 1s;

            proxy_pass http://[ip]:[port]$file;  # ceph rgw
        }

        location ^~ /resize {
            default_type image/png;
            content_by_lua_block {
                require("resize").run()
            }
        }

        error_log  /home/files/error_log info;
    }

2.2 resize.lua 脚本

local _M = {}
_M._VERSION = ‘0.01‘

local url = "/proxy"
local id = "** your access key **"
local key = "** your secret access key **"
local bucket = "upload"  -- bucket name
local file = "test.png"   -- object name

-- ******************************************************************* --

function forbidden(info)
    ngx.status = 403
    ngx.header["Content-Type"] = "text/plain"
    ngx.say("Opps, ", info)
    ngx.exit(403)
end

-- ******************************************************************* --

function get_obj()
    local destination = "/" .. bucket .. "/" .. file
    headers = generate_auth_headers("GET", destination)

    local res = ngx.location.capture(url..destination,
            { method = ngx.HTTP_GET,
              args = {date=headers.date, auth=headers.auth, file=destination}}
        )
    if not res then
      ngx.log(ngx.ERR, "failed to get_obj: ", destination, ": ", err)
      return
    end
    if res.status == 404 then
        ngx.status = 404
        ngx.header["Content-Type"] = "text/plain"
        ngx.say("Opps, file not found.")
        ngx.exit(404)
    end
    ngx.log(ngx.INFO, res.status)
    return res.body
end

function generate_auth_headers(method, destination, content_type)

    if content_type == nil then
        content_type = ‘‘
    end

    local timestamp = os.date("!%a, %d %b %Y %H:%M:%S +0000")

    local StringToSign = method..string.char(10)..string.char(10)..content_type..string.char(10)..timestamp..string.char(10)..destination
    local signed = ngx.encode_base64(ngx.hmac_sha1(key, StringToSign))
    signed = ‘AWS‘ .. ‘ ‘ .. id .. ‘:‘ .. signed

    headers = {}
    headers[‘auth‘] = signed
    headers[‘Content-Type‘] = content_type
    headers[‘date‘] = timestamp

    return headers
end

-- ******************************************************************* --

local function resize_image_rgw(data, file, w, h)
    ngx.log(ngx.INFO, "resizing img ",file)

    if not w and not h then
        return data
    end

    local f = io.open("/home/files/images/tmp.png", "w")
    f:write(data)
    f:flush()
    f:close()

    local cmd0 = "/usr/bin/gm convert /home/files/images/tmp.png -resize ";
    local cmd1 = "X";
    local cmd2 = " /home/files/images/tmp-tmp.png";
    local cmd_real = cmd0 .. w .. cmd1 .. h .. cmd2

    os.execute(cmd_real)

    local f1 = io.open("/home/files/images/tmp-tmp.png", "rb")
    if not f1 then
        return ngx.exit(ngx.HTTP_NOT_FOUND)
    end

    data1 = f1:read("*all")
    f1:close()

    os.execute("/usr/bin/rm -rf /home/files/images/*")

    return data1
end

local function response_from_rgw(w, h)
    local data = get_obj()
    if not data then
        forbidden("orgin image is not found...")
    else
        local data_final = resize_image_rgw(data, "test.png", w, h)
        if data_final then
            ngx.print(data_final)
        else
            forbidden("maybe is not a image file..")
        end
    end
end

-- ******************************************************************* --

function _M.run()
    local w = tonumber(ngx.var.arg_w)
    local h = tonumber(ngx.var.arg_h)

    response_from_rgw(w, h)
end

return _M

2.3 验证

可以根据以上的代码进行验证,resize 操作是否可行。

http://[ip]:8000/resize?w=50&h=50

原文地址:https://www.cnblogs.com/zhance/p/10153710.html

时间: 2024-11-29 07:37:47

验证 Openresty+Lua+GraphicsMagick的相关文章

OpenResty+lua+GraphicsMagick生成缩略图

1.安装GraphicsMagick 下载地址:http://www.graphicsmagick.org/ tar zxvf GraphicsMagick-1.3.20.tar.gz cd GraphicsMagick-1.3.20./configure make make install 安装依赖包Ghostscript,不安装的话加水印会找不到字体 yum install -y ghostscript 2.配置nginx.conf location /down/PersonImg { se

openresty+lua在反向代理服务中的玩法

openresty+lua在反向代理服务中的玩法 phith0n · 2015/06/02 10:35 0x01 起因 几天前学弟给我介绍他用nginx搭建的反代,代理了谷歌和维基百科. 由此我想到了一些邪恶的东西:反代既然是所有流量走我的服务器,那我是不是能够在中途做些手脚,达到一些有趣的目的. openresty是一款结合了nginx和lua的全功能web服务器,我感觉其角色和tornado类似,既是一个中间件,也结合了一个后端解释器.所以,我们可以在nginx上用lua开发很多“有趣”的东

使用nginx+lua+GraphicsMagick实现图片自动 裁剪

在做网站尤其是以内容为主的过程中,常常会遇到一张图片各种地方都要引用,且每个引用的地方要求的图片尺寸都不一样的.一般中大型的网站都会对这一类的图片做自动裁剪功能.本文介绍在centos6操作系统上,采用nginx.lua和GraphicsMagick工具简单实现图片的自动裁剪功能.其中nginx负责展示图片和调度lua脚本,GraphicsMagick负责对原图进行裁剪. 一.基础软件包安装groupadd wwwuseradd -g www www -s /bin/falseyum -y in

nginx+lua+GraphicsMagick生成实时缩略图-CentOS7

背景 大多数的系统都会涉及缩略图的处理,比如新闻系统和电商系统,特别是电商系统,每个商品大图都会对应一系列尺寸的缩略图用于不同业务场景的使用.部分系统也会生成不同尺寸的缩略图以供PC.手机端.ipad端使用. 解决方案探索: 直接加载原图,使用css样式表来控制图片的宽高.显然不太合适,大家也尽量不要这样做. web程序在上传成功后,同时生成相应缩略图.这种做法效率较低,如果遇到批量导入的业务时严重影响性能.并且同步生成缩略图会占用一定量的存储空间,如果能按需生成岂不更好? 使用七牛.阿里云提供

openresty lua 调试 (图文死磕)

疯狂创客圈 Java 高并发[ 亿级流量聊天室实战]实战系列 [博客园总入口 ] 架构师成长+面试必备之 高并发基础书籍 [Netty Zookeeper Redis 高并发实战 ] 前言 Crazy-SpringCloud 微服务脚手架 &视频介绍: Crazy-SpringCloud 微服务脚手架,是为 Java 微服务开发 入门者 准备的 学习和开发脚手架.并配有一系列的使用教程和视频,大致如下: 高并发 环境搭建 图文教程和演示视频,陆续上线: 中间件 链接地址 Linux Redis

OpenResty(Nginx)+Lua+GraphicsMagick实现缩略图功能

http://www.hopesoft.org/blog/?p=1188 2.用法 原始图片是input.jpg,尺寸:160×120 1)只缩小不放大 1 gm convert input.jpg -resize "500x500>" output_1.jpg 加了>,表示只有当图片的宽与高,大于给定的宽与高时,才进行“缩小”操作.生成的图片大小是:160×120,未进行操作如果不加>,会导致图片被比等放大. 2)等比缩图 (缺点:产生白边) 1 gm conver

openresty+lua做接口调用权限限制

说明:openresty可以理解为一个服务器它将nginx的核心包含了过来,并结合lua脚本语言实现一些对性能要求高的功能,该篇文章介绍了使用openresty 1.purview.lua --调用json公共组件 cjson = require("cjson") fun = require("ttq.fun") -- 引用公用方法文件 conf = require("ttq.ini") --引用配置文件 reds = require("

OpenResty + Lua + Redis 实现 客户端ip防刷

一.环境说明: 在Centos7上安装openresty此次安装采用的是下载openresty的yum源来安装 [[email protected] conf]# sudo yum-config-manager --add-repo https://openresty.org/yum/cn/centos/OpenResty.repo sudo:yum-config-manager:找不到命令解决办法: [[email protected] conf]# yum -y install yum-ut

【Lua】Lua + openresty遍历文件目录

OpenResty (也称为 ngx_openresty)是一个全功能的 Web 应用服务器,它打包了标准的 Nginx 核心,很多的常用的第三方模块,以及它们的大多数依赖项. 今天用OpenResty + lua来遍历指定目录,返回json字符串 我们用Lua来遍历文件目录,并用nginx来访问lua文件,使其返回这个目录的json字符串. Lua代码: 1 local lfs = require("lfs") 2 3 function getType(path) 4 return