2013-03-11 97 views
5

我需要对NGinx提供的图像进行一些耗时的处理,我希望能够快速响应来自缓存的部分处理图像。Nginx独立子请求

下面是我的步骤想:

  • 用户使图像第一请求
  • 用户获得的图像A不
  • 连接被释放
  • 像一个放在任何处理高速缓存(A0)
  • A “分离” 子请求开始时(S1)[第一图像变换]
  • 直到子请求S1完成后,对于所有请求像一大家A0
  • 当子请求S1完成后,高速缓存值将替换其结果(A1)
  • 从现在起对图像的所有请求得到A1
  • A“超然”的子请求启动(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) 
     '; 
    } 
} 

回答

4

我一直在使用post_action和ngx.location.capture试过,但他们都等待子请求完成关闭连接。

查看ngx.eof()文档。

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

+0

欢迎来到Stack Overflow!如果你真的提供了一个到'eof()'文档的链接,你的答案可以变得更好。 – Matt 2013-03-11 10:04:17