我可以让nginx在几秒钟后重新发送请求到FastCGI吗?

我的FastCGI(PHP-FPM)应用程序可能会遇到需要一些时间来自我修复的情况。 我想告诉nginx它应该等待几秒钟,然后重新发送请求到FastCGI后端。

我已经尝试了一个hacky安装,其中nginxconfiguration了fastcgi_next_upstream http_503 ( 请参阅文档 ),其中fastcgiconfiguration与上游相同:

 upstream php { server 127.0.0.1:9000; server 127.0.0.1:9000; } location ~ \.php(/|$) { fastcgi_pass php; fastcgi_next_upstream http_503 } 

当PHP应用程序需要一些时间和空间的时候,它会回复503 ,使得nginx“向前移动”到显然是同一个服务器的下一个上游。 不幸的是,nginx以毫秒为单位进行第二次调用。

我想延迟nginx的第二个电话几秒钟,以确保PHP后端完全正常运行后,错误的情况。 那么,如何在第二次尝试之前添加适当的延迟?

在幕后,我需要回收整个PHP-FPM过程,因为MongoDB驱动程序如何处理副本集故障转移。 这就是为什么我无法在PHP级别完全处理这个案例,但是需要短时间释放PHP过程。

你可以尝试使用HttpEchoModule来完成你所需要的。 那么你可以做这样的事情:

 location ~ \.php(/|$) { fastcgi_pass php; echo_sleep 3; fastcgi_next_upstream http_503; } 

不是一个nginx的答案,但你可以把Varnish作为前端来处理这个特定的情况。 检查圣徒模式作为一种可能性。

https://www.varnish-cache.org/trac/wiki/VCLExampleSaintMode