Ho bisogno di fare un po 'di elaborazione che richiede tempo su immagini che sono servite da NGinx, e mi piacerebbe essere in grado di rispondere rapidamente con immagini parzialmente elaborate dalla cache.Nginx distaccato subrequest
qui sono i passi di che mi piacerebbe:
- utente fare prima richiesta di immagine Una
- ottenere l'utente immagine A senza alcuna elaborazione
- connessione viene liberato
- immagine A è messa nella cache (A0)
- Viene avviato un sottorequest "distaccato" (S1) [prima trasformazione immagine]
- Fino a quando subrequest S1 non è terminato, tutte le richieste per immagine A ottenere A0
- Quando sotto richiesta S1 è fatto, valore cache viene sostituito con i suoi risultati (A1)
- Da ora in poi ogni richiesta di immagine Una arrivare A1
- viene avviata una sotto richiesta "distaccato" (S2) [ seconda immagine trasformazione]
- Fino sotto richiesta S2 è fatto, tutte le richieste di immagine Una arrivare A1
- Quando sotto richiesta S2 è fatto, valore cache viene sostituito con i suoi risultati (A2) . . . e così via
sto usando il modulo nginx Lua per elaborare le immagini, e mi piacerebbe essere in grado di utilizzare la funzionalità proxy_cache (LRU ripulire, TTL, ecc)
ho provato usando proxy_pass, post_action e ngx.location.capture, ma tutti aspettano che il subrequest finisca di chiudere la connessione. Ho visto alcune soluzioni come Drupal Cache Warmer che emettono una chiamata al SO per arricciarsi, ma se possibile mi piacerebbe non farlo.
Questo è il mio banco di prova finora
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)
';
}
}
Benvenuti in Stack Overflow! La tua risposta potrebbe essere migliorata molto se fornissi effettivamente un link alla documentazione 'eof()'. – Matt