Назад | Перейти на главную страницу

Как выполнить оператор if / else с nginx conf?

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

В модуле перезаписи Nginx есть if директива (примеры см. в связанной документации), но не else. Эквивалент для else было бы все, что не модифицировано if.

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

Также обратите внимание, что вы не должны использовать if внутри location так как это может не работать должным образом (см. Если это зло).

В приведенной форме это не сработает: тестирование HTTP User-Agent подразумевает, что запрос уже был получен. Это возможно, только если некоторые server блок уже был определен. Вы действительно хотите запускать новые серверы в зависимости от строки User-Agent запроса, который вы получили в другом месте?

Если вы просто хотите обслуживать разный контент, перенаправлять на разные пути и т. Д., В зависимости от частей запроса, таких как User-Agent, это возможно, например с участием http://nginx.org/en/docs/http/ngx_http_rewrite_module.html