限制来自某些推介的某些页面请求(nginx)

时间:2011-12-15 17:19:27

标签: nginx

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测试失败

任何帮助都将不胜感激。

感谢。

2 个答案:

答案 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