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