Ho apache come server back-end, che esegue script php e nginx come server proxy inverso che gestisce il contenuto statico. Un php-script, che mi dà l'ID di qualche processo e poi esegue questo processo (piuttosto lungo). Devo passare al browser solo l'ID di quel processo.Nginx come proxy inverso mentre polling lungo
// ...
ob_start();
echo json_encode($arResult); // only this data should be passed to browser
$contentLength = ob_get_length();
header('Connection: close');
header('Content-Length: ' . $contentLength);
ob_end_flush();
ob_flush();
flush();
// then performed a long process
(posso controllare lo stato del proccess con un altro ajax-script)
Questo funziona bene sotto solo apache. Ma ho problemi con Apache dietro a nginx. In questo caso ricevo risposta solo quando il processo è completato.
impostazioni nginx:
server {
#...
proxy_set_header Connection close;
proxy_pass_header Content-Length;
#...
}
Ma ho ancora connessione keep-alive in Firebug.
Come posso ottenere nginx per dare immediatamente una risposta da apache?
Spero che la domanda sia chiara.
Grazie.
Hai provato proxy_buffering off in nginx? Non sono sicuro che chiuderà la connessione ma almeno la risposta verrà trasmessa così come è per il client. – regilero
@regilero questo funziona! Immagino che in combinazione con alcune direttive "location" lavorerò a proxy_buffering per il contenuto di riposo e la soluzione di lavoro per il mio script. Dovresti postare come risposta. – SaltLake