Maison  >  Questions et réponses  >  le corps du texte

problème de configuration de la configuration nginx

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中文网2688 Il y a quelques jours601

répondre à tous(2)je répondrai

  • 阿神

    阿神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 ?


    @冰风 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🎜

    répondre
    0
  • 漂亮男人

    漂亮男人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
        }
    

    répondre
    0
  • Annulerrépondre