Você pode tentar usar o HttpEchoModule para realizar o que precisa. Então você poderia fazer algo assim:
location ~ \.php(/|$) {
fastcgi_pass php;
echo_sleep 3;
fastcgi_next_upstream http_503;
}
Meu aplicativo FastCGI (PHP-FPM) pode encontrar uma situação em que precise de algum tempo para se recuperar. Gostaria de dizer ao nginx que ele deve aguardar alguns segundos e depois reenviar o pedido para o backend FastCGI.
Eu já experimentei uma configuração hacky em que o nginx está configurado com fastcgi_next_upstream http_503
( consulte os documentos ) com um desenvolvedor mesma configuração fastcgi duas vezes:
upstream php {
server 127.0.0.1:9000;
server 127.0.0.1:9000;
}
location ~ \.php(/|$) {
fastcgi_pass php;
fastcgi_next_upstream http_503
}
O aplicativo PHP responderá com 503
quando precisar de algum tempo e espaço, fazendo com que o nginx "avance" para o próximo upstream que aparentemente é o mesmo servidor. Infelizmente, o nginx faz a segunda chamada em milissegundos.
Eu gostaria de atrasar a segunda chamada do nginx em alguns segundos para ter certeza de que o backend do PHP está totalmente instalado e funcionando após a situação errada. Então, como adicionar um atraso adequado antes da segunda tentativa?
Nos bastidores, eu preciso reciclar todo o processo do PHP-FPM devido ao modo como o driver do MongoDB lida com o failover do conjunto de réplicas. É por isso que não consigo lidar com o caso totalmente no nível do PHP, mas preciso liberar o processo do PHP por um curto período.
Você pode tentar usar o HttpEchoModule para realizar o que precisa. Então você poderia fazer algo assim:
location ~ \.php(/|$) {
fastcgi_pass php;
echo_sleep 3;
fastcgi_next_upstream http_503;
}
Não é uma resposta nginx, mas você pode colocar o Varnish como front-end para lidar com esse caso específico. Confira o modo Saint como uma possibilidade.