problème de configuration de la configuration nginx
PHP中文网
PHP中文网 2017-05-16 17:29:03
0
2
712

1

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 ?

2

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


Alors, quel camarade de classe doté de mérites et de renommée cachés peut aider à répondre à la question ?

PHP中文网
PHP中文网

认证0级讲师

répondre à tous(2)
阿神

D'accord, je l'ai fait avec if, mais nginx ne recommande pas d'utiliser if. Quelqu'un a-t-il une meilleure solution ?


@冰风 cette personne, il semble que le texte pour te répondre ne puisse pas utiliser le format md, je te répondrai ici :

Merci. Cependant, votre réponse n'a pas répondu à ma question

.

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 $http

header1, $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 :

curl -H "header_php:a" http://biz.domain.com/ La $route finale est 111, et fastcgi_pass localhost:111
  1. curl -H "header_python:b" http://biz.domain.com/ La $route finale est 212 et fastcgi_pass localhost:212 最终$route为 111, 并 fastcgi_pass localhost:111
  2. curl -H "header_python:b" http://biz.domain.com/ 最终$route为 212, 并 fastcgi_pass localhost:212
  3. curl -H "header_ruby:c" http://biz.domain.com/ 最终$route为 313, 并 fastcgi_pass localhost:313
  4. curl -H "header_ruby:c" http://biz.domain.com/ La $route finale est 313, et fastcgi_pass localhost:313

Alors
  1. php-1 surveille 111, php-2 surveille 112, php-3 surveille 113
  2. python-1 surveille 211, python-2 surveille 212, python-3 surveille 213
  3. ruby-1 écoute 311, ruby-2 écoute 312, ruby-3 écoute 313

Au final, il y a 9 processus métier au total, chacun écoutant un port.

Ne me demandez pas pourquoi j'ai une demande si étrange, c'est mon mérite caché et ma renommée~~~

Donc, votre réponse ne peut pas satisfaire mes désirs d'animaux🎜
漂亮男人

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
    }
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal