Nginx:如果 User-Agent 为空,如何重写

Nginx:如果 User-Agent 为空,如何重写

当 User-Agent 标头为空时,如何设置?(例如 HTTP/1.0)

这是我迄今为止尝试过的:

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;

答案1

您的配置是正确的,并且在这里运行良好(CentOS 7,nginx 1.6.1)。

如果您检查 error_log 文件,您可能会看到如下错误:

2014/09/10 09:35:45 [错误] 5786#0:*3 没有定义解析器来解析 example.com,客户端:1.2.3.4,服务器:example.com,请求:“GET / HTTP/1.1”,主机:“example.com”

在这种情况下,添加解析器nginx 的 location 子句。例如:

resolver 8.8.8.8;

这是 access_log 中的结果:

1.2.3.4 - - [10/Sep/2014:09:37:40 -0400] "GET / HTTP/1.0" 200 2155 "-" ": 修复空用户代理" "-"

答案2

最好避免使用 if 指令。您可以改用 map 来$ua根据收到的User-Agent标头是否缺失或为空进行填充:

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;
            ...
         }
      ...
      }
   }
}

相关内容