2011-01-22 12 views
5

Tengo apache como servidor de fondo, que ejecuta scripts php y nginx como un servidor proxy inverso que trata con contenido estático. Un php-script, que me da ID de algún proceso y luego realiza este proceso (bastante largo). Necesito pasarle al navegador solo la ID de ese proceso.Nginx como proxy inverso durante el sondeo largo

// ... 
    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 

(puedo comprobar el estado de la proccess con otro ajax-script)

Esto funciona bien bajo Apache solo. Pero tengo problemas cuando Apache está detrás de nginx. En este caso, recibo respuesta solo cuando el proceso está completamente terminado.

configuración de nginx:

server { 
    #... 
    proxy_set_header Connection close; 

    proxy_pass_header Content-Length; 
    #... 
} 

Pero sigo teniendo la conexión de mantenimiento de conexión en FireBug.

¿Cómo puedo obtener nginx para dar inmediatamente una respuesta de apache?

Espero que la pregunta sea clara.

Gracias.

+1

has necesitado proxy_buffering apagado en nginx? No estoy seguro de que cerrará la conexión, pero al menos la respuesta se transmitirá tal cual al cliente. – regilero

+0

@regilero esto funciona! Supongo que en combinación con algunas directivas 'location' tendré funcionando proxy_buffering para el resto del contenido y la solución de trabajo para mi script. Deberías publicar esto como una respuesta. – SaltLake

Respuesta

5

¿Has probado proxy_buffering off en nginx? No estoy seguro de que cerrará la conexión, pero al menos la respuesta se transmitirá tal cual al cliente. :-)

0

Nginx no admite ninguno de los métodos flush() en PHP cuando se usa en un esquema fastcgi o reverse_proxy.

He probado todas las configuraciones de proxy_buffering_ *, buffer_size_ * sin éxito en nginx/0.8.49. Siempre esperará hasta que el proceso PHP salga.

+0

Nginx no es compatible con el control de almacenamiento en búfer de salida cuando se utiliza con php como fastcgi? – SaltLake

Cuestiones relacionadas