Bagaimana pernyataan if / else dengan nginx conf?

9

apakah mungkin untuk melakukan hal seperti ini dengan nginx?

if ( $http_user_agent = "wget" ){
   server {
      listen      11.11.11.11:1111;
      root        /website1/;
      server_name example.com www.example.com;
else 

   server {
      listen      22.22.22.22:22222;
      root        /website2/;
      server_name example2.com www.example2.com;
}
pengguna421936
sumber
Anda mungkin ingin melihat pada modul peta .
gf_
2
Anda menulis sesuatu yang aneh dan sangat tidak berarti. Cobalah untuk memulai dari awal, masalah apa yang ingin Anda pecahkan
Alexey Ten

Jawaban:

9

Modul penulisan ulang Nginx memang memiliki ifarahan (lihat dokumentasi terkait untuk contoh), tetapi tidak else. Setara untuk elseakan semua yang tidak dimodifikasi denganif .

Anda bisa menggunakannya ifdi dalam server { }tetapi tidak sebaliknya. Anda bahkan tidak akan memiliki kondisi dibandingkan di jika Anda sebelum permintaan yang sudah membutuhkan server. Di sana, Anda hanya bisa menayangkan konten saat agen pengguna (atau tidak) wget.

Perhatikan juga bahwa Anda tidak boleh menggunakannya ifdi dalam locationkarena mungkin tidak berfungsi seperti yang diinginkan (lihat Jika Ada Kejahatan ).

Esa Jokinen
sumber
3

Dalam bentuk yang diberikan itu tidak akan berfungsi: menguji HTTP User-Agent menyiratkan, bahwa permintaan sudah diterima. Itu hanya mungkin jika beberapa serverblok sudah ditentukan. Apakah Anda benar-benar ingin memulai server baru tergantung pada string Agen-Pengguna dari permintaan yang Anda terima di tempat lain?

Jika Anda hanya ingin menyajikan konten yang berbeda, mengarahkan ulang ke jalur yang berbeda, dll. Tergantung pada bagian dari permintaan seperti User-Agent, itu mungkin, misalnya dengan http://nginx.org/en/docs/http/ngx_http_rewrite_module. html

Stefan Moch
sumber