Ubuntu

僅針對某些請求單獨的 Nginx 訪問日誌文件

  • March 30, 2022

據我所知,Nginx 預設支持 2 個日誌文件:(error_log跟踪與 Nginx 伺服器本身相關的問題)和access_log(跟踪 Nginx 處理的請求)。雖然可以access_log使用log_format指令控制格式,但我未能找到一種僅將某些請求記錄到單獨文件的方法,因此想問一下關於 SF 的問題,作為未來讀者的參考:

有沒有辦法將某些請求記錄到與定義的不同的日誌文件中access_log

僅供參考,這個問題背後的原因是我有一個規則,它拒絕訪問帶有 200 的不需要的爬蟲(因為 403 會給他們一個暗示他們被阻止的提示),並且從這些請求中過濾出來access_log變得更加困難。

cjc讓我走上正軌。access_log在語句中單獨使用if是不可能的(你會得到一個nginx: [emerg] "access_log" directive is not allowed here錯誤)。所以解決方法如下:

if ($http_user_agent ~* (crawler) ) {
 set $crawler 'yes';
}
location ~ .* {
 if ($crawler = 'yes') {
   access_log /var/log/nginx/blockedbots.log;
   return 200;
   }
}

access_log 支持以下情況:

(access_log 路徑

$$ format [buffer=size [flush=time $$]$$ if=condition $$];) access_log /var/.... if $crawler;

來源:

http://nginx.org/en/docs/http/ngx_http_log_module.html

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