Eu me conformei com essa solução:
- 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
- 200 OK com o resultado
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.
Eu me conformei com essa solução:
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.
Tags nginx