web-dev-qa-db-fra.com

Directive Apache proxypass ne récupère pas rapidement

J'utilise cette directive "simple" Apache ProxyPass.

<VirtualHost *:80>
    ProxyPreserveHost On    
    ProxyPass / http://0.0.0.0:3000/
    ProxyPassReverse / http://0.0.0.0:3000/
    ServerName my.name.org
</VirtualHost>

Ça marche bien. Si le serveur interne à l'écoute sur le port 3000 "s'arrête" temporairement et que je fais une demande à "my.name.org", un 503 est renvoyé comme prévu. Cependant, même si le serveur interne se présente, une requête ultérieure à "my.name.org" aboutit à un 503 pendant "une certaine période" (alors que, si aucune requête initiale générant un 503 ne se produit, aucune requête ultérieure ne fonctionnera normalement. ). Y a-t-il une valeur que je peux ajuster pour faire en sorte qu'après la restauration du serveur interne, Apache le remarque et l'utilise plus rapidement?

2
rogerdpack

Lorsqu'une connexion à un serveur principal génère et une erreur (par défaut, n'importe quel code 5xx _). Apache marque cette connexion comme dans un état d'erreur . . Apache n'utilisera alors pas cette connexion pendant une période de temps contrôlée par le paramètre retry sur ProxyPass. La valeur par défaut est 60 secondes.

Cela signifie qu'à moins que vous ne le changiez, une fois que votre back-end générera un code de retour 5xx, Apache n'enverra plus de requête pendant 60 secondes, mais renverra immédiatement un 503 au navigateur client.

Vous pouvez changer cela en réglant le retry sur un nombre inférieur. Par exemple, n'attendez que 5 secondes avant de réessayer:

ProxyPass / http://0.0.0.0:3000/ retry=5

Les détails de cette option, et de nombreuses autres, figurent dans la documentation ProxyPass ici: https://httpd.Apache.org/docs/current/mod/mod_proxy.html#proxypass

3
Unbeliever