使用proxy_store存储图像,然后使用lua处理。

我正在尝试使用nginx实现类似这样的功能。首先,我使用 proxy_pass 下载图像。然后,我想使用 lua 操作该图像并提供操作后的图像。我认为最简单的方法是使用proxy_store将图像下载到文件中:

location ~* ^/test/(.*?)/(.*) {
    alias /some/path/$1_$2;
    proxy_pass http://$1/$2;
    proxy_store on;
    content_by_lua '
        -- 在这里使用 /some/path/$1_$2 处的图像
    ';
}

然后使用 lua 读取和操作该文件。但是,在使用proxy_store将图像下载并保存之前,就已经进入了content_by_lua部分。如何让图像在进入content_by_lua之前下载?

点赞
用户139117
用户139117

找到解决方法:我正在寻找nginx子请求。我的新解决方案大致如下:

location ~* /proxy/(.*?)/(.*) {
  # 下载并返回图像
  proxy_pass http://$1/$2;
}

location ~* ^/test/(.*?)/(.*) {
    # 这样我们可以从lua中使用这个url
    set $url $1/$2;
    content_by_lua '
        -- 使用/proxy路由获取url的内容。这会创建一个子请求,
        -- 这意味着它适合于nginx的异步模型。
        response = ngx.location.capture("/proxy/" .. ngx.var.url)
        -- response.body 包含图像,对它进行任何操作
        resized = resize_image(response.body)
        -- 最后,返回最终图像
        ngx.say(resized)
    ';
}
2014-09-09 22:15:15