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
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:
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.curl -H "header_php:a" http://biz.domain.com/-
- curl -H "header_python:b" http://biz.domain.com/
- curl -H "header_ruby:c" http://biz.domain.com/
curl -H "header_ruby:c" http://biz.domain.com/$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
Kemudian-
- php-1 monitor 111, php-2 monitor 112, php-3 monitor 113
- python-1 monitor 211, python-2 monitor 212, python-3 monitor 213
ruby-1 mendengar 311, ruby-2 mendengar 312, ruby-3 mendengar 313Pada 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~~~
Hos perlu memahami beberapa perkara: 1. Pernyataan dalam arahan peta mesti melaksanakan 1 N secara lalai.
bersamaan dengan
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