2013-03-11 2 views
5

NGinx에서 제공하는 이미지를 처리하는 데 시간이 오래 걸리고 캐시에서 부분적으로 처리 된 이미지를 신속하게 처리하고 싶습니다. 여기 Nginx detached subrequest

이 원하는 I의 단계는 다음과 같습니다

  • 사용자가 이미지에 대한 첫 번째 요청을
  • 사용자
  • 연결이 해제 될
  • 이미지 A를 넣어 어떤 처리없이 이미지 A를 얻을 (A0)
  • "분리 된"하위 요청이 시작됨 (S1) [첫 번째 이미지 변환]
  • 하위 요청 S1이 완료 될 때까지 이미지 얻을 A0
  • S1이 완료 subrequest 때 캐시 값은 그 결과 (A1) 지금부터 화상에 대한 모든 요청
  • A는 A1 얻을으로 치환
  • A "분리"subrequest가 시작된다 (S2) S2 완료 subrequest까지 제 2 화상 변환]
  • , 화상 A에 대한 모든 요청은 subrequest S2 완료
  • A1
  • 얻을, 캐시는 그 결과 값 (A2) 로 대체된다. . . 등

에 나는 이미지를 처리하기 위해 Nginx에 루아 모듈을 사용하고, 나는

내가 시도 (LRU는,, 등 TTL을 정리) proxy_cache 기능을 사용할 수 있도록하고 싶습니다 proxy_pass, post_action 및 ngx.location.capture를 사용하지만 모두 하위 요청이 끝나기를 기다리며 연결을 닫습니다. Drupal Cache Warmer과 같은 솔루션을 사용하여 말풍선에 OS 호출을 보내지 만, 가능하다면 그렇게하지 않으려합니다.

이 내 테스트 지금까지

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를 사용하여 시도하는 경우, 그러나 둘 다 연결을 닫습니다 끝까지 subrequest을 기다릴 것입니다.

ngx.eof() 문서를 살펴보십시오.

업데이트 : http://wiki.nginx.org/HttpLuaModule#ngx.eof

+0

스택 오버플로에 오신 것을 환영합니다! 'eof()'문서에 대한 링크를 제공했다면 답을 훨씬 더 좋게 만들 수 있습니다. – Matt

관련 문제