Nginx e fcgiwrap, problemas de saída incremental

2

Quando executo um script cgi no Apache, qualquer saída é enviada rapidamente para o cliente. No entanto, quando eu o executo sob nginx com fcgiwrap, parece que nada é enviado para o cliente até que o script termine ou produza muitos resultados.

Esse comportamento pode ser visto com o seguinte script.

 #!/bin/bash
 echo "Content-type: text/html"
 echo
 while :
 do
       echo this is a test.
       sleep 5
 done

Sob o apache, o cliente obterá alguns dados a cada 5 segundos.

Em nginx com fcgiwrap não recebo dados nem tempo limite de gateway.

nginx e fcgiwrap são pacotes do Debian Jessie. Versões 1.1.0-5 e 1.6.2-5 + deb8u4

Então as perguntas

  1. Alguém sabe qual é o responsável por esse comportamento? nginx em si? fcgiwrap? ambos?
  2. É algo que pode ser corrigido através da configuração?
  3. Se é um problema de fcgiwrap, existem alternativas de cgi disponíveis que não sofrem o problema?
por Peter Green 27.05.2017 / 13:40

1 resposta

2

Ok, descobri. Parece que tanto o nginx quanto o fcgiwrap possuem buffering indesejável no lugar. Para o nginx parece que pode ser desabilitado através da configuração enquanto o fcgiwrap precisa de um patch.

Eu postei um debdiff para o fcgiwrap no link isso adiciona uma nova opção NO_BUFFERING

Em seguida, a configuração do nginx precisa ser alterada para passar a opção NO_BUFFERING para fcgiwrap e para desativar o buffer dentro do nginx.

Para fazer isso, adicionei algumas configurações imediatamente antes e depois do "include fastcgi_params;" linha.

    #note: NO_BUFFERING relies on a patched fcgiwrap.
    fastcgi_param NO_BUFFERING 1;
    include fastcgi_params;
    gzip off;
    fastcgi_buffering off;
    
por 27.05.2017 / 15:08