Apache-2.2

在命名中使用 ip 為每個客戶端自動專用 access_log

  • March 12, 2017

我們有一個內部應用程序,我想讓 apache httpd 伺服器根據每個客戶端 ips 創建新的日誌文件。在我看到的文件中,您可以有多個日誌。

http://httpd.apache.org/docs/2.2/logs.html

LogFormat "%h %l %u %t \"%r\" %>s %b" common
CustomLog logs/access_log common
CustomLog logs/referer_log "%{Referer}i -> %U"
CustomLog logs/agent_log "%{User-agent}i"

但我真正想要的是這樣的。

CustomLog logs/%h-access_log common

其中 %h 被推斷為 IP 地址,即 1.1.1.1-access_log

我想有一種 mod_perl 方法可以做到這一點,但只是想知道在我編寫模組之前是否有人知道通過標準配置來做這樣的事情。

使用 Apache 日誌管道功能:日誌可以發送到外部程序。該過程將有充分的自由來根據需要過濾事物並根據需要創建文件。見http://httpd.apache.org/docs/2.2/logs.html#piped

您只需要編寫解析日誌輸入的小腳本以提取 IP 地址並將該行轉發到適當的文件。

否則,如果您可以控制客戶端的數量,您可以預先定義所有需要的文件,然後通過特定變數使用條件日誌記錄,在同一 URL 中查看此範例:

# Mark requests from the loop-back interface
SetEnvIf Remote_Addr "127\.0\.0\.1" dontlog
# Mark requests for the robots.txt file
SetEnvIf Request_URI "^/robots\.txt$" dontlog
# Log what remains
CustomLog logs/access_log common env=!dontlog 

但即使有你最新的評論,我仍然認為後處理是更好的途徑。YMMV。

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