Rumah > Soal Jawab > teks badan
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?
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
阿神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?
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 $httpheader1, $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:
$route terakhir ialah 111 dan fastcgi_pass localhost:111
最终$route为 111, 并 fastcgi_pass localhost:111
最终$route为 212, 并 fastcgi_pass localhost:212
最终$route为 313, 并 fastcgi_pass localhost:313
curl -H "header_python:b" http://biz.domain.com/ $route terakhir ialah 212 dan fastcgi_pass localhost:212
$route terakhir ialah 313 dan fastcgi_pass localhost:313
漂亮男人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
}