2011-12-15 144 views
0

nginx有沒有辦法根據推介拒絕訪問網站的特定部分?限制來自某些推薦的某些頁面請求(nginx)

基本上試圖阻止訪問來自2個referrer域的2個目錄。

這裏是我使用的代碼:

if (($http_referer ~* (badomain1.com|badomain2.com)) && 
    ($request_uri ~* (directory1/|directory2/)) 
    ) { 
    return 403; 
} 

但nginx的失敗,錯誤:

[EMERG]:無效的條件 「($ HTTP_REFERER」 在/ usr /本地/ nginx的/ conf目錄/ nginx.conf:88 配置文件/usr/local/nginx/conf/nginx.conf測試失敗

任何幫助,將不勝感激

感謝

回答

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; 
} 
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*。 「返回」和「設置」是有效的重寫指令。

我使用類似的設置來過濾請求,並通過使用Lua通過Lua模塊進行評估,實際上將其佔用了一個級別。

if (*expression1* OR *expression2*) AND (*expression3* OR *expression4*) then 
    *Complex Code* 
end 
+0

但是在這種情況下,兩個表達式都不會被滿足?它會像是OR? – 2011-12-18 09:18:31