我的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作为前端来处理这个特定的情况。 检查圣徒模式作为一种可能性。