2014-01-28 45 views
7

基本上,我試圖刪除搜索引擎抓取工具,例如Google,Bing以及我的訪問日誌中沒有的工具。隨着時間的推移,它們會逐漸積累起來,最終會在日誌中添加數十萬條無用的訪問日誌條目,如果您需要搜索日誌條目,這尤其是一件痛苦的事情。我遇到的麻煩是,在我的塊中,我正在定義訪問日誌,因此Nginx只是看着那個,忽略我在位置/塊中定義的第二個。如果我註釋掉我的網站訪問日誌(不是抓取塊),那麼它工作正常。下面是配置:Nginx禁用某些用戶代理的日誌記錄

server { 
listen 80; 
server_name example.com; 
access_log /home/domains/example.com/logs/access; 
error_log /home/domains/example.com/logs/error; 
root /home/domains/example.com/forums; 
location/{ 
     index index.html index.htm; 
     if ($http_user_agent ~* ("googlebot")) { 
     access_log off; 
     } 
} 

我在發佈內容中刪除,只是一切(包括PHP,並沒有什麼),但我已經檢查,沒有什麼是評論的一切,除了進行上文什麼是一切干擾它。所以總結一下,我在虛擬塊中定義了一個記錄所有流量的日誌(我已經爲每個塊定義了日誌,使它更整潔,沒有,我試圖禁止某些用戶代理的日誌記錄,除非我禁用網站的主要日誌,它會繼續記錄我告訴它不要給用戶代理。

我一直在這裏幾個小時,現在,任何幫助將不勝感激

回答

0

嗯,其實正則表達式("googlebot")將匹配用戶代理雙引號,顯然不是你想要的。如果你想刪除的括號,和引號,你應該罰款。

+0

謝謝,但我遇到的問題不是用戶代理的匹配。相反,出於某種原因,我無法關閉所有用戶代理的日誌記錄,除非我刪除了我的塊的定義的日誌位置。 – Ryan

+0

它看起來與用戶代理匹配是個問題,因爲'access_log'不會被執行,除非正則表達式匹配。我也使用類似於你的conf來測試它,它工作得很好。 –

+0

我意識到我沒有完全正確的語法,但它足以挑選Google。例如,如果我在access_log後面輸入「return 403」,它將返回403,但是日誌仍然保留,除非我刪除爲該服務器塊上的所有請求定義的日誌。 – Ryan

0

您需要添加返回200; access_log關閉後;

,所以它看起來是這樣的:

location/{ 
    if ($http_user_agent ~* "(googlebot)") { 
     access_log off; 
     return 200; 
    } 
} 
2

,則不應使用if報表nginx - if is evil

使用conditional logging

http { 

    map $http_user_agent $excluded_ua { 
     ~Googlebot 0; 
     default  1; 
    } 
    ....... 
} 

server { 

    access_log /home/domains/example.com/logs/access combined if=$excluded_ua; 

} 

但是要小心剔除googlebot一些辱罵機器人僞裝自己。