添加基于cookies的header

Nie*_* B. 2 nginx

我想添加一个请求标头,指示请求是来自桌面客户端还是移动客户端。

我尝试在服务器块中添加它

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";
}
Run Code Online (Sandbox Code Playgroud)

nginx -t回应"if" directive is not allowed here

我可以从各种帖子中了解到if在 Nginx 中无法像您想象的那样工作,但我不确定其他方法来解决这个问题。

将这个简单的逻辑移入应用程序在这里不是一个选项,因为 Nginx 将需要它作为缓存键。

小智 5

您可以通过 map 指令而不是 if 来执行此操作。

map $http_user_agent $device_category {
    default "desktop";
    "~*ipad" "desktop";
    "~*mobile|phone" "mobile";
}
Run Code Online (Sandbox Code Playgroud)

然后在您的位置块中:

proxy_set_header X-Device-Category $device_category;
Run Code Online (Sandbox Code Playgroud)