使用此配置:
server {
listen 8080;
location / {
if ($http_cookie ~* "mycookie") {
proxy_set_header X-Request $request;
proxy_pass http://localhost:8081;
}
}
}
重新加载nginx服务时出现此错误:
Reloading nginx configuration: nginx: [emerg] "proxy_set_header" directive is not allowed here in /etc/nginx/conf.d/check_cookie.conf:5
nginx: configuration file /etc/nginx/nginx.conf test failed
此配置可以正常工作,但它不能满足我的要求:
server {
listen 8080;
location / {
proxy_set_header X-Request $request;
if ($http_cookie ~* "mycookie") {
proxy_pass http://localhost:8081;
}
}
}
为什么我不能将 proxy_set_header 指令放在if子句中?
答案 0 :(得分:2)
在内部位置尝试这样的事情
# default header value in a new variable
set $esb "$remote_addr, $host";
# if my custom header exists
if ($http_my_header){
set $esb "$http_my_header, $remote_addr, $host";
}
proxy_set_header my-header $esb;
答案 1 :(得分:0)
与proxy_pass不同,您不能将proxy_set_header放在if块中。您只能将其放在http / server / location块中。所以你的第二个配置很好。
参考:http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_set_header
上下文:http,服务器,位置
不知道$ request变量是什么。它不会出现在nginx变量列表中:http://wiki.nginx.org/HttpCoreModule#Variables。你想在这里实现什么目标?