masalah tetapan nginx conf
PHP中文网
PHP中文网 2017-05-16 17:29:03
0
2
711

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中文网

认证0级讲师

membalas semua(2)
阿神

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

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
    }
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan