Как сделать заявление 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;
}
user421936
источник
Возможно, вы захотите взглянуть на модуль карты .
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

Стефан Мох
источник