Nginx renvoie 502 pendant que le backend redémarre. Comment puis-je faire réessayer le proxy nginx N fois avec un retard de M secondes? Existe-t-il un plugin ou autre chose?
16
J'ai trouvé que Nginx prenait ~ 2 secondes pour épuiser les tentatives si vous spécifiez des centaines d'instances du même backend:
server localhost:8080 max_fails=0;
server localhost:8080 max_fails=0;
server localhost:8080 max_fails=0;
server localhost:8080 max_fails=0;
(.... euh, répétez au besoin!)
Oui, une horrible culpabilité - mais cela ajoute un certain degré de ténacité ...
Pire encore, vous pouvez utiliser:
server localhost:8080 max_fails=0;
server localhost:80 backup;
En supposant que Nginx s'exécute sur le port 80, cela tenterait de boucler continuellement la demande autour de Nginx jusqu'à ce que localhost: 8080 réponde. C'est-à-dire réessayer un nombre infini (?) De fois avec un retard de zéro seconde.
Je vais retourner dans ma cellule rembourrée maintenant ....
Si votre installation nginx prend en charge Lua, vous pouvez conserver le client pendant un certain temps avec la méthode sleep. L'opération n'est pas bloquante et ne verrouille pas le travailleur. Gardez à l'esprit que l'utilisateur ne peut pas être maintenu indéfiniment car certains autres délais d'attente de socket / pare-feu liés au réseau peuvent se produire finalement.
Ensuite, dans votre liste en amont, vous devez ajouter le serveur ci-dessus comme sauvegarde pour contenir un client.
Et cela devrait être inclus dans votre spécification d'emplacement proxy:
la source
lua
module sur nginx sur ubuntu 17.04, exécutez:sudo apt-get install libnginx-mod-http-lua
La chose la plus proche que je connaisse est ce projet , mais je ne l'ai jamais utilisé. Je sais que le vernis a une vérification de backend, peut-être que vous voulez y jeter un œil.
la source