Changement proxy_pass, Si l'état est effectué?

Je veux utiliser le flux ascendant la plupart du temps, mais un autre que je veux permettre l'indication du serveur cible en fonction de l'en-tête de la demande. X-Target-Server.

J'ai un serveur qui cherche une variable de demande et l'affiche dans le cadre de mon nginx.conf. Ensuite, j'ai une configuration d'un serveur virtuel qui effectue les actions suivantes:

proxy_pass [url=https://backend_dev_test;]https://backend_dev_test;[/url]
if ($is_target_specified) {
proxy_pass https://$http_x_target_server;
}

Que se passe-t-il lorsque la directive est spécifiée proxy_pass? Couronne tout de suite? Est-ce que cela le fait travailler deux fois? Ou ne visera-t-il que sur la seconde si la condition est effectuée?

Il semble que cela fonctionne dans certains blocs d'emplacement, mais ne travaille pas dans d'autres, et je ne comprends pas pourquoi. Y a-t-il un meilleur moyen d'aborder cela? Emplacements complets ci-dessous

Il semble que ça marche

location ~* /v3/(test|other)/ {
proxy_cache_bypass "1";
proxy_no_cache "1";
resolver 8.8.8.8;
proxy_ignore_client_abort on;
rewrite ^/v3/(.*)$ /$1 break;
proxy_pass [url=https://backend_dev_test;]https://backend_dev_test;[/url]
if ($is_target_specified) {
proxy_pass https://$http_x_target_server;
}
}

Ne semble pas fonctionner

location ~* /v3 {
proxy_cache_bypass "1";
proxy_no_cache "1";
resolver 8.8.8.8;
proxy_ignore_client_abort on;
proxy_pass [url=https://backend_dev;]https://backend_dev;[/url]
if ($is_target_specified) {
proxy_pass https://$http_x_target_server;
}
}
Invité:

Pour répondre aux questions, connectez-vous ou registre