Apache HTTP 伺服器第 2.4 版
在使用大量的虛擬主機時,如果每個虛擬主機都指定不同的記錄檔,Apache 可能會用盡可用的檔案描述詞(有時稱為 檔案控管)。Apache 所使用的檔案描述詞總數,每一個不同的錯誤記錄檔一個,每一個其他記錄檔指令一個,加上 10-20 個供內部使用。Unix 作業系統會限制程序可以使用檔案描述詞的數量;限制通常是 64,且通常可以增加到較大的硬限制。
雖然 Apache 試圖在需要時增加限制,但當下列情況發生時,此方法可能無法使用
setrlimit()
系統呼叫。setrlimit(RLIMIT_NOFILE)
呼叫在你的系統上無法使用(例如 Solaris 2.3)在發生問題時,你可以
<VirtualHost>
區段中指定記錄檔,而只記錄到主記錄檔。(有關如何執行的詳細資訊,請參閱下列 拆分記錄檔。)
#!/bin/sh
ulimit -S -n 100
exec httpd
如果想要將多個虛擬主機記錄到同一個記錄檔,你可能會希望之後拆分記錄檔,以針對不同的虛擬主機執行統計分析。你可以依照下列方式完成此操作。
首先,你需要將虛擬主機資訊新增到記錄條目中。這可以使用 LogFormat
指令和 %v
變數執行。將此新增到記錄格式字串的開頭
LogFormat "%v %h %l %u %t \"%r\" %>s %b" vhost CustomLog logs/multiple_vhost_log vhost
這將會在常見的日誌格式中建立一個日誌檔,但會將規則的虛擬主機(出現在 ServerName
指令中)置於每一行的前面。 (參閱 mod_log_config
以了解更多自訂日誌檔的方法。)
當你想要將你的日誌檔分割成其組成部分時(每個虛擬主機一個檔案),你可以使用程式 split-logfile
來完成。你可以在 Apache 發行版本的 support
目錄中找到這個程式。
使用下列指令執行此程式
split-logfile < /logs/multiple_vhost_log
使用你的 vhost 日誌檔名稱執行此程式時,將會為日誌檔中出現的每個虛擬主機產生一個檔案。每個檔案都將命名為 hostname.log
。