Como se / outra instrução com nginx conf?

9

é possível fazer algo assim com o 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
fonte
Você pode dar uma olhada no módulo de mapa .
gf_
2
Você escreveu algo estranho e sem sentido. Tente começar do começo, que problema você quer resolver
Alexey Dez 26/06

Respostas:

9

O módulo de reescrita do Nginx possui ifdiretiva (consulte a documentação vinculada para exemplos), mas não else. O equivalente a elseseria tudo o que não é modificado com umif .

Você pode usar ifdentro de um, server { }mas não o contrário. Você nem teria a condição comparada no seu if antes de uma solicitação que já precisa do servidor. Lá, você só pode veicular conteúdo quando o agente do usuário é (ou não é) wget.

Observe também que você não deve usar ifdentro location, pois pode não funcionar como desejado (consulte Se é mau ).

Esa Jokinen
fonte
3

No formulário fornecido, não funcionará: testar o Agente do Usuário HTTP implica que a solicitação já foi recebida. Isso só é possível se algum serverbloco já estiver definido. Deseja realmente iniciar novos servidores, dependendo da cadeia de agente do usuário de uma solicitação que você recebeu em outro lugar?

Se você deseja apenas exibir conteúdo diferente, redirecione para caminhos diferentes, etc., dependendo de partes da solicitação como o User-Agent, isso é possível, por exemplo, com http://nginx.org/en/docs/http/ngx_http_rewrite_module. html

Stefan Moch
fonte