nginx中有没有办法根据推介拒绝访问网站的特定部分?
基本上试图阻止从2个引荐来源域访问2个目录。
以下是我正在使用的代码:
if ( ($http_referer ~* (badomain1.com|badomain2.com)) &&
($request_uri ~* (directory1/|directory2/))
) {
return 403;
}
但nginx失败并出现错误:
[emerg]:无效条件“($ http_referer”在/usr/local/nginx/conf/nginx.conf:88 配置文件/usr/local/nginx/conf/nginx.conf测试失败
任何帮助都将不胜感激。
感谢。
答案 0 :(得分:0)
认为你需要像这样逃避点:\。
然后返回444,它的内部是nginx,根本不回答。
if ($http_referer ~* (babes|click|diamond|forsale|girl|jewelry|love|nudit|organic|poker|porn|poweroversoftware|sex|teen|video|webcam|zippo) ) {
return 444;
}
答案 1 :(得分:0)
Nginx“if”语句与PHP等脚本语言中的“if”不同。它只是一个重写指令。
你不能拥有像
这样的东西if *expression1* OR *expression2* then
*code*
end
你需要做
if *expression1* then
*Rewrite Directive Only*
end
if *expression2* then
*Rewrite Directive Only*
end
要做
if *expression1* AND *expression2* then
*code*
end
你需要做
if *expression1* then
set $myVar X;
end
if *expression2* then
set $myVar $myVarX;
end
if $myVar = XX then
*Rewrite Directive Only*
end
重要的是要注意Nginx中的“if”只是一个重写指令,这意味着只有其他重写指令应该进入*code*
。 “Return”和“Set”是有效的重写指令。
我使用类似的设置来过滤请求,并通过使用Lua通过Lua模块进行评估实际上将其提升到一个级别。
if (*expression1* OR *expression2*) AND (*expression3* OR *expression4*) then
*Complex Code*
end