我正在尝试阻止或重定向到所有在uri中不包含某些字符串或关键字的请求。我正在寻找使用nginx的解决方案。 特别是" NOT包含字符串"。如果不可能! (不)匹配,有没有其他选择。
答案 0 :(得分:0)
嗯,你可以尝试这样的事情:
location / {
if (condition_1) {
break;
}
if (condition_2) {
break;
}
...
if (condition_n) {
break;
}
return 400;
proxy_pass http://backend;
}
如果condition_1,... condition_n匹配,break
关键字阻止return 400
,请求转到proxy_pass
。如果所有条件都失败return 400
将使nginx响应400 Bad Request
错误。
条件可以是if
支持的任何内容。例如。 if ($args_pass = 1)
或if ($http_user_agent ~ MSIE)
等
答案 1 :(得分:0)
我建议使用地图:
map $uri $bad_request {
# start by assuming it's a bad request
default 1;
# if any of the following match, clear the $bad-request variable
~a-required-string 0;
~another-required-string 0;
# ...
}
location / {
if ($bad_request) {
return 400;
}
}