Como inserir um atraso na resposta com o nginx?

2

Eu tenho um aplicativo fast-cgi que faz algum trabalho no link . O trabalho pode demorar alguns minutos. Por isso, quero continuar redirecionando os usuários para a mesma URL (com 307) até que o trabalho seja concluído e exibir os resultados com um 200 OK. Eu gostaria de retardar a taxa de resposta, de modo que leva o cliente 30s (por exemplo) para receber um 307. Obviamente, eu não quero fazer no back-end, porque eu preciso lidar com outros trabalhos. É possível dizer ao nginx para inserir um atraso ou limitar a resposta para um determinado URL?

Eu olhei para o limit_req, mas não acho que ele possa ser usado para classificar URLs de limite exclusivo ( link versus link ), mas endereços IP únicos.

    
por Julien 03.01.2012 / 07:21

2 respostas

1

Eu me conformei com essa solução:

  1. Envie 307 com os cabeçalhos:
    • Transfer-Encoding: chunked
    • Comprimento do conteúdo: X
    • Cache-Control: no-cache
    • Pragma: no-cache
    • escreve um pedaço de 1 byte a cada segundo por X segundos
  2. 200 OK com o resultado
por 04.01.2012 / 06:16
3

Você pode reestruturar seu aplicativo para lidar melhor com a situação. Eu teria dois scripts: um é a página da Web que o usuário acessa. O segundo é um script de back-end que doa o trabalho.

O script dois pode ser um daemon, ou você pode usar o bifurcação sem bloqueio se o seu ambiente suportar o script um. O script um deve iniciar o trabalho no script dois e, em seguida, enviar dados para o usuário usando algo como EventStream ( ou WebSockets, embora isso seja um grande exagero aqui) atualizando-os do status. Você pode enviar 200 ou alguma outra indicação quando estiver pronto.

    
por 03.01.2012 / 07:33

Tags