使用以下配置:
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_headerif 子句内的指令?
答案1
假设您实际上想问的是“我怎样才能让它工作”,那么如何只需重写以便始终传递标题,但如果您不想设置它,则将其设置为某个忽略的值。
server {
listen 8080;
location / {
set $xheader "someignoredvalue";
if ($http_cookie ~* "mycookie") {
set $xheader $request;
}
proxy_set_header X-Request $xheader;
if ($http_cookie ~* "mycookie") {
proxy_pass http://localhost:8081;
}
}
答案2
在 nginx 配置中,“If” 通常是一种不好的做法。您可以使用 map 模块来使事情正常运作。请参阅http://nginx.org/en/docs/http/ngx_http_map_module.html http://wiki.nginx.org/HttpMapModule