Nginx分离了子请求

我需要对Nginx提供的图像进行一些时间处理,并且我希望能够快速响应来自缓存的部分处理图像.

以下是我喜欢的步骤:

>用户首先请求图像A.
>用户无需任何处理即可获得图像A.
>释放连接
>图像A放在缓存(A0)上
>启动“分离”子请求(S1)[第一次图像转换]
>在子请求S1完成之前,对图像A的所有请求都获得A0
>当子请求S1完成时,缓存值将替换为其结果(A1)
>从现在开始,对图像A的所有请求都获得A1
>启动“分离”子请求(S2)[第二次图像转换]
>在子请求S2完成之前,对图像A的所有请求都获得A1
>子请求S2完成后,缓存值将替换为其结果(A2)
.
.
.
等等

我正在使用Nginx Lua模块处理图像,我希望能够使用proxy_cache功能(LRU清理,TTL等)

我尝试过使用proxy_pass,post_action和ngx.location.capture,但所有这些都等待子请求完成以关闭连接.我已经看到像Drupal Cache Warmer这样的解决方案发出了一个操作系统调用卷曲,但如果可能的话我不想这样做.

到目前为止,这是我的测试用例

server {
    listen       8080;

    location / {

        rewrite_by_lua '
            ngx.say(".")
            --res = ngx.location.capture("/internal")
            ngx.exit(ngx.OK)
        ';

        proxy_pass http://127.0.0.1:8080/internal;

    }

    location /internal {
        content_by_lua '
            ngx.log(ngx.ERR,"before")
            ngx.sleep(10)
            ngx.say("Done")
            ngx.log(ngx.ERR,"after")
            ngx.exit(ngx.OK)
        ';
    }
}
最佳答案

I have tried using post_action and ngx.location.capture,but both of them wait for the subrequest to finish to close the connection.

看一下ngx.eof()文档.

更新:http://wiki.nginx.org/HttpLuaModule#ngx.eof

相关文章

一、Linux下Nginx的安装 1.去官网 http://nginx.org/download/下载对应的Nginx安装包,推荐使...
一、空格:默认匹配、普通匹配 location / { root /home; } 二、= :精确匹配(表示匹配到 /home/resou...
``` nginx -c 配置文件路径 ``` ``` /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.con...
前言 nginx可所谓是如今最好用的软件级别的负载均衡了。通过nginx的高性能,并发能力强,占用内存下的特...
1.ngnix概念 Nginx是一款高性能的http 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器。由俄...
博客园从今天上午就开始报502错误 , 他的原因还不知道 , 暂时先说下我们遇到502的排查情况 最大的可能性...