Nginx: Como reescrever o User-Agent se vazio

3

Como posso definir um cabeçalho de agente de usuário quando estiver vazio? (Por exemplo, HTTP / 1.0)

Isso é o que eu tentei até agora:

set $ua $http_user_agent;

if ($http_user_agent = "") //also tried = false
{
    set           $ua "Fixing-Empty-User-Agent";
    proxy_pass    http://$host$request_uri;
}

proxy_connect_timeout   2;
proxy_send_timeout      10;
proxy_read_timeout      10;

proxy_set_header User-Agent: $ua;
    
por cedivad 10.09.2014 / 13:20

2 respostas

2

Sua configuração está correta e funciona como um encanto aqui (CentOS 7, nginx 1.6.1).

Se você verificar seu arquivo error_log, provavelmente verá um erro como este:

2014/09/10 09:35:45 [error] 5786#0: *3 no resolver defined to resolve example.com, client: 1.2.3.4, server: example.com, request: "GET / HTTP/1.1", host: "example.com"

Nesse caso, adicione um resolvedor à cláusula de localização do nginx. Por instace:

resolver 8.8.8.8;

E este é o resultado em access_log:

1.2.3.4 - - [10/Sep/2014:09:37:40 -0400] "GET / HTTP/1.0" 200 2155 "-" ": Fixing-Empty-User-Agent" "-"

    
por 10.09.2014 / 15:41
0

É melhor evitar a diretiva if. Em vez disso, você pode usar um mapa para preencher $ua com base no cabeçalho User-Agent recebido ausente ou vazio:

http {
   ...
    map $http_user_agent $ua {
       ''   "Fixing-Empty-User-Agent";
       default $http_user_agent;
    }
    ...
    server {
    ...
        location xx { 
            proxy_pass yy;
            proxy_set_header User-Agent: $ua;
            ...
         }
      ...
      }
   }
}
    
por 14.02.2017 / 08:24

Tags