Як зробити if / else оператор з nginx conf?


9

чи можна зробити щось подібне з 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;
}

Ви можете подивитися модуль карти .
gf_

2
Ви написали щось дивне і цілком безглуздо. Спробуйте почати з початку, яку проблему ви хочете вирішити
Олексій Десять,

Відповіді:


9

Модуль перезапису Nginx має ifдирективу (див. Зв'язану документацію для прикладів), але ні else. Еквівалентом elseбуде все, що не модифіковане зif .

Ви можете використовувати ifвсередині, server { }але не навпаки. У вас навіть не було б порівняно з умовою, якщо ви отримаєте запит, який вже потрібен серверу. Там ви можете подавати вміст лише тоді, коли агент користувача є (або ні) wget.

Також зауважте, що не слід вживати ifвсередину, locationоскільки це може працювати не так, як бажано (див. " Якщо є зло" .


3

У наведеній формі він не працюватиме: тестування HTTP User-Agent означає, що запит вже отримано. Це можливо лише в тому випадку, якщо якийсь serverблок вже був визначений. Ви дійсно хочете запускати нові сервери залежно від рядка User-Agent запиту, який ви отримали десь ще?

Якщо ви просто хочете подавати різний контент, перенаправляти на різні шляхи тощо, залежно від частин запиту, таких як User-Agent, це можливо, наприклад, за допомогою http://nginx.org/en/docs/http/ngx_http_rewrite_module. html

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.