Rumah  >  Soal Jawab  >  teks badan

masalah tetapan nginx conf

1

Dalam bahagian http {}, tetapkan

map $http_header_1 $route {default 10;}
map $http_header_2 $route {default 20;}
map $http_header_3 $route {default 30;}

Tajuk yang diminta ditetapkan kepada

curl -H "header_1:0" http://xxx.com/xxx

Kemudian dalam bahagian pelayan {},

echo "$route";

Hasil cetakan sentiasa 30, kerana arahan peta ketiga menimpa nilai sebelumnya;

Persoalannya ialah: Bagaimana untuk mendapatkan nilai yang diingini berdasarkan pengepala berbeza di bahagian peta?

2

Untuk menyelesaikan masalah 1, cara yang saya fikirkan ialah

map $http_header_1 $route1 {default 10;}
map $http_header_2 $route2 {default 20;}
map $http_header_3 $route3 {default 30;}

Kemudian di bahagian lokasi {}, gunakan

if ($http_header_1) {
echo "$route1";
}

Untuk mendapatkan nilai yang diingini; Malangnya, if ini nampaknya tidak berjaya, dan nginx tidak mengesyorkan menggunakan if


Jadi, rakan sekelas mana yang mempunyai merit dan kemasyhuran tersembunyi yang boleh membantu menjawab soalan?

PHP中文网PHP中文网2688 hari yang lalu599

membalas semua(2)saya akan balas

  • 阿神

    阿神2017-05-16 17:31:03

    Baiklah, saya telah melakukannya dengan if, tetapi nginx tidak mengesyorkan menggunakan if. Adakah sesiapa mempunyai penyelesaian yang lebih baik?


    @冰风 orang itu, nampaknya teks untuk membalas kepada anda tidak boleh menggunakan format md, saya akan membalas anda di sini:

    Terima kasih Namun, jawapan anda tidak menjawab soalan saya

    Keperluan perniagaan saya ialah:

    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;
    }
    

    Iaitu, permintaan mempunyai dan hanya satu daripada $http

    header1, $httpheader2, $httpheader3, dan mempunyai nilai yang sepadan dengan a, b, c

    nginx perlu menentukan kunci pengepala dan mengembalikan nilai $route yang disahkan berdasarkan nilai yang sepadan dengan kunci.

    Contoh Perniagaan:

      curl -H "header_php:a" http://biz.domain.com/ $route terakhir ialah 111 dan fastcgi_pass localhost:111
    1. 最终$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:313curl -H "header_python:b" http://biz.domain.com/ $route terakhir ialah 212 dan fastcgi_pass localhost:212
    curl -H "header_ruby:c" http://biz.domain.com/ $route terakhir ialah 313 dan fastcgi_pass localhost:313

      Kemudian
    1. php-1 monitor 111, php-2 monitor 112, php-3 monitor 113
    2. python-1 monitor 211, python-2 monitor 212, python-3 monitor 213
    ruby-1 mendengar 311, ruby-2 mendengar 312, ruby-3 mendengar 313

    Pada akhirnya, terdapat 9 proses perniagaan secara keseluruhan, masing-masing mendengar port.


    Jangan tanya saya mengapa saya mempunyai permintaan yang pelik, itu adalah merit dan kemasyhuran saya yang tersembunyi~~~

    🎜Jadi, jawapan anda tidak dapat memenuhi keinginan haiwan saya🎜

    balas
    0
  • 漂亮男人

    漂亮男人2017-05-16 17:31:03

    Hos perlu memahami beberapa perkara: 1. Pernyataan dalam arahan peta mesti melaksanakan 1 N secara lalai.

    map $http_header_1 $route {default 10;}
    map $http_header_2 $route {default 20;}
    map $http_header_3 $route {default 30;}
    

    bersamaan dengan

    传入$http_header_1任意值(即使为null),返回$route=10;
    传入$http_header_2任意值(即使为null),返回$route=20;
    传入$http_header_3任意值(即使为null),返回$route=30;
    

    Jadi, $laluan keluar terakhir ialah 30;

    peta ialah arahan untuk mewujudkan hubungan pemetaan antara berbilang nilai masuk dan nilai keluar Sebaik-baiknya nilai masuk telah ditakrifkan dan ditetapkan sebelum dihantar ke peta, jika tidak lalai akan dilaksanakan secara langsung.

    Poster asal boleh mencubanya

        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
        }
    

    balas
    0
  • Batalbalas