Como digo ao Nginx para aguardar alguns segundos antes de servir um ativo?

14

Portanto, quando estou testando localmente coisas como o Ajax nos aplicativos que estou escrevendo, geralmente gosto de adicionar um atraso nos scripts do servidor usando uma sleepdeclaração. Ajuda a simular conexões lentas, etc.

Existe uma maneira de especificar um comportamento de atraso semelhante diretamente na configuração do Nginx que funcione para os arquivos HTML simples que ele está servindo?

Sei que você pode fazer uma simulação de atraso semelhante no nível da rede (veja aqui ), mas parece bastante confuso e nunca funcionou muito bem para mim.

BaronVonKaneHoffen
fonte
Você não acha que seria ainda mais confuso com o Nginx?
DukeLion

Respostas:

3

Gostaria de acrescentar à resposta da astlock que, se você quiser responder com clareza return, observe que há uma ressalva: você deve usar echo, não uma returndiretiva padrão , depois echo_sleepde responder com um atraso, assim:

location = /slow-reply {
  echo_sleep 5.0;
  #return 200 'this response would NOT be delayed!';      
  echo 'this text will come in response body with HTTP 200 after 5 seconds';
}

(Testado em openresty / 1.7.10.2)

Greg Dubicki
fonte
0

Fornecendo uma explicação mais detalhada de como você pode usar o módulo echo:

Se você estiver iniciando em uma configuração básica, que carrega arquivos estáticos e arquivos PHP, com algo como isto:

location ~ \.php$ {
    include fastcgi.conf;
    fastcgi_pass php;
}

Isso pode ser convertido em algo assim para adicionar um atraso às solicitações estáticas e PHP:

# Static files
location / {
    echo_sleep 5;
    echo_exec @default;
}
location @default {}

// PHP files
location ~ \.php$ {
    echo_sleep 5;
    echo_exec @php;
}
location @php {
    include fastcgi.conf;
    fastcgi_pass php;
}

Obviamente, isso pode ser modificado para o que você quiser. Basicamente, mova cada bloco de localização para um local nomeado @. Em seguida, use echo_sleepe echo_execno bloco de localização original.

Sam Bull
fonte
-1

você pode definir um servidor back-end para receber a solicitação e atrasar a resposta no servidor. Proxy Nginx a solicitação para o servidor back-end.

user387318
fonte
-3

Não há como (IHMO) atrasar a resposta do nginx. Você precisa refazer o aplicativo e não o servidor da web para ativar esse recurso.

deagh
fonte