Nginx

如何阻止來自特定使用者代理的 Nginx 訪問日誌語句

  • April 20, 2022

我希望關閉來自 http 使用者代理的特定請求的登錄 Nginx 訪問日誌文件。

基本上來自 Amazon ELB 健康檢查和我們的外部(Pingdom)監控。由於這些每隔幾秒鐘出現一次,因此很難對日誌進行排序。

"GET / HTTP/1.1" 200 727 "-" "ELB-HealthChecker/1.0"
"GET /login HTTP/1.1" 200 7492 "-" "Pingdom.com_bot_version_1.4_(http://www.pingdom.com/)"

我能夠阻止圖像文件的日誌記錄,但沒有看到任何傳入請求:

location ~* ^.+.(jpg|jpeg|gif|css|png|js|ico|xml|svg)$ {
       access_log        off;
       expires           30d;
}

提前致謝!


所以我嘗試了@Gnarfoz 的建議,但有一些有趣的副作用。雖然沒有記錄這兩個“健康檢查”,但 Pingdom 開始將伺服器辨識為 DOWN,即使它已啟動並執行。這很有趣,因為負載均衡器沒有,如果有的話,它會刪除我們正在測試的節點。

我將 MAP 部分放在我的日誌下方的 HTML 塊中:

access_log /www/access.log;
error_log /www/error.log;

map $http_user_agent $ignore_ua {
           default                 0;
           "~Pingdom.*"            1;
           "ELB-HealthChecker/1.0" 1;
   }

我將 IF 語句放在我的伺服器塊中,預設位置:

location / {
               try_files $uri $uri/ /index.php?$args;

               if ($ignore_ua) {
                      access_log off;
               }
       }

當我這樣做時,Pingdom 開始在錯誤日誌文件中生成 404 錯誤:

2012/08/03 17:10:33 [error] 6250#0: *164 open() "/www/public_html/login" failed (2: No such file or directory), client: 10.xx.xx.xx, server: xxx.com, request: "GET /login HTTP/1.1", host: "xxx.com"
2012/08/03 17:11:32 [error] 6250#0: *240 open() "/www/public_html/login" failed (2: No such file or directory), client: 10.xx.xx.xx, server: xxx.com, request: "GET /login HTTP/1.1", host: "xxx.com"

試試這個:

# map goes *outside* of the "server" block
map $http_user_agent $ignore_ua {
   default                 0;
   "~Pingdom.*"            1;
   "ELB-HealthChecker/1.0" 1;
}

server {
   # Things omitted for brevity

   location / {
       if ($ignore_ua) {
           access_log off;
           return 200;
       }
   }
}    

if 部分可能需要集成到您適當的位置塊中。

相關 nginx 文件: map , if , access_log

感謝**@gnarfoz**

關於if is Evil,這是在 log 之前使用條件的更好方法

map $http_user_agent $ignore_ua {
   default                 1;
   "~Pingdom.*"            0;
}

server {
   location / {
       access_log /var/log/nginx/access.log if=$ignore_ua;
   }
}  

啟用條件日誌記錄的 NGINX 文件

引用自:https://serverfault.com/questions/414027