Maison > Questions et réponses > le corps du texte
Dans la section http {}, définissez
map $http_header_1 $route {default 10;}
map $http_header_2 $route {default 20;}
map $http_header_3 $route {default 30;}
L'en-tête demandé est défini sur
curl -H "header_1:0" http://xxx.com/xxx
Puis dans la section serveur {},
echo "$route";
Le résultat imprimé est toujours 30, car la troisième instruction de carte écrase la valeur précédente ;
La question est : Comment obtenir la valeur souhaitée en fonction des différents en-têtes dans la partie carte ?
Pour résoudre le problème 1, comme je le pense
map $http_header_1 $route1 {default 10;}
map $http_header_2 $route2 {default 20;}
map $http_header_3 $route3 {default 30;}
Puis dans la partie location {}, utilisez
if ($http_header_1) {
echo "$route1";
}
Pour obtenir la valeur souhaitée ; Honteusement, cela ne semble pas réussir, et nginx ne recommande pas d'utiliser if
阿神2017-05-16 17:31:03
D'accord, je l'ai fait avec if, mais nginx ne recommande pas d'utiliser if. Quelqu'un a-t-il une meilleure solution ?
.
Mes besoins professionnels sont :
map $http_header_1 $route {
default 110;
a 111;
b 112;
c 113;
}
map $http_header_2 $route {
default 210;
a 211;
b 212;
c 213;
}
map $http_header_3 $route {
default 310;
a 311;
b 312;
c 313;
}
C'est-à-dire que la requête n'a qu'un seul parmi $httpheader1, $httpheader2, $httpheader3, et a une valeur correspondante de a, b, c. nginx doit déterminer la clé de l'en-tête et renvoyer une valeur $route confirmée basée sur la valeur correspondant à la clé.
Exemple commercial :
La $route finale est 111, et fastcgi_pass localhost:111
La $route finale est 212 et fastcgi_pass localhost:212
最终$route为 111, 并 fastcgi_pass localhost:111
最终$route为 212, 并 fastcgi_pass localhost:212
最终$route为 313, 并 fastcgi_pass localhost:313
La $route finale est 313, et fastcgi_pass localhost:313
Au final, il y a 9 processus métier au total, chacun écoutant un port.
漂亮男人2017-05-16 17:31:03
L'hôte doit comprendre certaines choses : 1. Les instructions de l'instruction map doivent exécuter 1 sur N par défaut.
map $http_header_1 $route {default 10;}
map $http_header_2 $route {default 20;}
map $http_header_3 $route {default 30;}
équivaut à
传入$http_header_1任意值(即使为null),返回$route=10;
传入$http_header_2任意值(即使为null),返回$route=20;
传入$http_header_3任意值(即使为null),返回$route=30;
Donc, la $route sortante finale est 30 ;
map est une instruction pour établir la relation de mappage entre plusieurs valeurs entrantes et valeurs sortantes. Il est préférable que la valeur entrante ait été définie et attribuée avant d'être transmise à la carte, sinon la valeur par défaut sera exécutée directement.
L'affiche originale peut l'essayer
map $http_user_agent $route{
"Baiduspider" 1; #当$http_user_agent为Baiduspider,返回$route = 1
"Googlebot" 2; #当$http_user_agent为Googlebot,返回$route = 2
default 0; #否则,返回$route = 0
}