我想添加一个请求标头,指示请求是来自桌面客户端还是移动客户端。
我尝试将其添加到服务器块中
if ($http_user_agent ~* 'mobile|phone') && ($http_user_agent !~* 'ipad') {
proxy_set_header X-Device-Category "mobile";
} else {
proxy_set_header X-Device-Category "desktop";
}
但nginx -t
回应"if" directive is not allowed here
我可以从各种帖子中了解到if
Nginx 的工作方式并不像你想象的那样,但我不确定是否有其他方法可以解决这个问题。
将这个简单的逻辑移到应用程序中在这里不是一个选择,因为 Nginx 将需要它作为缓存键。
答案1
您可以通过 map 指令而不是 if 来执行此操作。
map $http_user_agent $device_category {
default "desktop";
"~*ipad" "desktop";
"~*mobile|phone" "mobile";
}
然后在您的位置块中:
proxy_set_header X-Device-Category $device_category;