2011-01-22 6 views
5

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.

+1

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

+0

@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

risposta

5

Hai provato proxy_buffering su nginx? Non sono sicuro che chiuderà la connessione ma almeno la risposta verrà trasmessa così come è per il client. :-)

0

Nginx non supporta nessuno dei metodi flush() in PHP quando utilizzato in uno schema fastcgi o reverse_proxy.

Ho testato tutte le numerose configurazioni proxy_buffering_ *, buffer_size_ * senza successo in nginx/0.8.49. Attenderà sempre fino all'uscita del processo PHP.

+0

Nginx non supporta il controllo del buffer di output quando utilizzato con php as fastcgi? – SaltLake