NGINX 1.9x / RHEL
如果没有设置cookie,我正在尝试为某个请求返回204。我无法获取nginx.conf文件来传递config test或restart。尝试对创建的MAP变量进行测试时,第一个IF块失败。
http block...
map $http_cookie $my_login_cookie {
default 0;
"~hello_logged_in" 1;
}
Server Block....
location ~ /$ {
if ($my_login_cookie = 0) { <<<<<< Statement is not working
if ($args ~ "^Blah=(.*)") {
return 204;
}
}
}
我发现很多代码示例表明这种事情应该是可行的。我错过了什么?!?!
&LT;&LT;&LT;&LT;&LT;&LT;更新的最终工作代码&gt;&gt;&gt;&gt;&gt;&gt;
http block...
map $http_cookie $my_login_cookie {
default 0;
"~hello_logged_in" 1;
}
Server Block....
location ~ /$ {
set $my_redirect y;
if ($my_login_cookie = 0) {
set $my_redirect "${my_redirect}e";
}
if ($args ~ "^blah=(.*)") {
set $my_redirect "${my_redirect}s";
}
if ($my_redirect = "yes") {
return 204;
}
}
答案 0 :(得分:1)
nginx不支持嵌套ifs和多个条件if。
您错过了{after if($ my_login_cookie = 0),否则您会在"if" directive is not allowed here
行收到以下警告if ($args ~ "^Blah=(.*)") {
。
您的配置的可能解决方案:
# test whether my_login_cookie is set
if ($my_login_cookie = 0) {
set $test C;
}
# test
if ($args ~ "^Blah=(.*)") {
set $test "${test}A";
}
# if both of the above tests are true return
if ($test = CA) {
return 204;
}