第十四章 網頁伺服器進階應用

網頁伺服器架設之後,世界各地的使用者都可以經由網際網路連到您的主機,如何維護網站安全是一大課題。管理者更需要知道網站的使用情形,系統資源、網路頻寬是否足夠。本章將說明網頁伺服器使用上常見的管理議題,並介紹一些好用的管理工具。讀完本章後,您將進一步了解下列主題:

14.1 HTTP 安全與 SSL 協定

當我們使用網路服務時,經由網路傳送的資料都有可能被他人攔截竊聽。簡單的說,當您從網頁上輸入帳號密碼時,如果有人在您所使用的電腦和伺服器之間攔截,就可以輕易的從網路封包中竊聽到您所輸入的資料。

隨著網路的蓬勃發展,線上交易的使用量日益增加,對於資料的保護更是重要。如果一個線上交易的網站使用普通的 HTTP,則使用者輸入的帳號密碼、交易資料、信用卡號等等都有可能會外洩,更別說交易資料被假造的風險了。為了解決 HTTP 的網路安全,發展出許多加密、認證的機制。其中最常見的就是使用金鑰加密法的 HTTP over SSL (Secure Socket Layer),又稱為 HTTPS,目前國內許多網路銀行都是使用 HTTPS 作為交易安全的第一道關卡。

SSL 的加密方式是由伺服器端提供了一組加解密用的金鑰,在伺服器端所使用的是私密金鑰 (Private key),而客戶端所使用的是公開金鑰 (Public key)。在連線建立後,HTTP 伺服器會將公開金鑰傳給客戶端使用。公開金鑰加密過的資料只能由私密金鑰解密,在客戶端要送出資料之前,會先使用公開金鑰進行加密的動作,而伺服器收到資料後,會使用私密金鑰進行解密。

在 Apache 2 中,預設安裝即支援 SSL,我們只需產生一組金鑰,並設定啟動 SSL 即可。

14.1.1 產生金鑰

正確的憑證產生方法是先產生伺服器用的公鑰及 CSR (Certificate Signing Request),接著將 CSR 送給專門做憑證簽發的公正單位做簽章。或者,我們也可以自己做為一個憑證簽發單位,自己為自己簽發憑證。但由於我們自己產生的憑證不具公信力,所以使用者使用 HTTPS 連到網站時,會出現下列的警告訊息:

圖 14-1

這個警告訊息並不影響加密,不過如果您所架設的是商用網站,您還是得交由公正單位作簽證。

如果您要使用自我簽發的憑證,第一步是要產生簽發單位憑證,我們先建立一個目錄名為 ssl,並將產生的憑證放在該目錄下:

# mkdir ssl
# cd ssl
# openssl genrsa -out ca.key 1024
# openssl req -new -key ca.key -out ca.csr
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:TW
State or Province Name (full name) [Some-State]:Taiwan
Locality Name (eg, city) []:Taipei
Organization Name (eg, company) [Internet Widgits Pty Ltd]:My Company
Organizational Unit Name (eg, section) []:Certificate Authority
Common Name (eg, YOUR name) []:MyCA
Email Address []:alex@alexwang.com

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:按 Enter 即可
An optional company name []:按 Enter 即可

# openssl x509 -days 365 -signkey ca.key -in ca.csr -req -out ca.crt
# echo "01" > ca.srl

我們在第二個 openssl 指令中必須輸入一些基本資訊,最後產生一個有效期限 365 天的憑證。接著,必須產生 Apache 伺服器用的憑證:

# openssl genrsa -out server.key 1024
# openssl req -new -key server.key -out server.csr
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:TW
State or Province Name (full name) [Some-State]:Taiwan
Locality Name (eg, city) []:Taipei
Organization Name (eg, company) [Internet Widgits Pty Ltd]:My Company
Organizational Unit Name (eg, section) []:Web Team
Common Name (eg, YOUR name) []:www.alexwang.com
Email Address []:alex@alexwang.com

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:按 Enter 即可
An optional company name []:按 Enter 即可

# openssl x509 -days 365 -CA ca.crt -CAkey ca.key -in server.csr -req -out server.crt

同樣的,我們必須輸入關於這個憑證的一些資料,最後,我們使用之前所產生的憑證簽發一個有效期限 365 天的伺服器用憑證。必須注意的是,在 Common Name 必須輸入您的主機名稱,以避免連線時憑證名稱和網頁名稱不符的警告。另外,我們在產生憑證時,當 OpenSSL 要求輸入用來保護憑證的密碼時,我們都沒有輸入密碼。如果您輸入密碼,則以後 Apache 要啟動時都必須輸入密碼才可以啟動。

最後,我們將伺服器用的憑證複製到 Apache 的設定檔位置:

# cp server.crt /usr/local/etc/apache22/server.crt
# cp server.key /usr/local/etc/apache22/server.key
# chmod 400 /usr/local/etc/apache22/server.crt
# chmod 400 /usr/local/etc/apache22/server.key

最後,請將我們製作過程中的憑證刪除:

# rm -rf ssl

憑證製作完成後,我們就可以開始設定支援 SSL 的 Apache 了。

14.1.2 設定及啟動 HTTPS

首先,我們必須先修改 /usr/local/etc/apache22/httpd.conf 以使用 SSL 的設定檔:

# Secure (SSL/TLS) connections
Include etc/apache22/extra/httpd-ssl.conf

接著,我們必須先修改 /usr/local/etc/apache22/extra/httpd-ssl.conf 以設定 SSL,請先找到下列區段:

<VirtualHost _default_:443>

# General setup for the virtual host
DocumentRoot "/home/www"
ServerName www.example.com:443
ServerAdmin you@example.com
ErrorLog /var/log/httpd-error.log
TransferLog /var/log/httpd-access.log

我們必須修改 DocuemntRoot,並將它設為我們網頁根目錄,然後要修改 ServerName,將它設定為我們的主機名稱。

為了要該 Apache 啟動時可以支援 SSL,請在 /etc/rc.conf 中加入 Apache SSL 的設定:

apache2ssl_enable="YES"

最後,請重新啟動 Apache 即可:

# /usr/local/etc/rc.d/apache22 restart

接下來,您就可以使用 https://192.168.0.1 連到您的主機了。請注意,我們使用的連線方法是 https,而非 http。如果您連線的主機名稱和憑證產生的名稱不同,將會有名稱不符的警告訊息。

圖 14-2

14.2 對目錄設定密碼保護

在架設網站時,如果您有特殊需求,必須指定某個目錄只能由某些使用者才能存取,我們可以使用 Apache 內建的目錄保護功能,讓使用者必須輸入使用者名稱及密碼才能存取該目錄。

在開始設定目錄的保護之前,我們必須先修改 httpd.conf,允許使用者可以在網頁目錄中使用認證功能。首先 ,請編輯 /usr/local/etc/apache22/httpd.conf,找到網頁目錄設定的區段:

...
LoadModule auth_module libexec/apache2/mod_auth.so
...
<Directory "/home/www">
	Options Indexes FollowSymLinks MultiViews ExecCGI
	AllowOverride AuthConfig
	Order allow,deny
	Allow from all
</Directory>
...
AccessFileName .htaccess
...

我們必須先確定 Apache 有載入 mod_auth.so 模組。接著,我們在網頁目錄的區段中 AllowOverride 的部份設定了使用 AuthConfig。如果 AllowOverride 設為 None 表示不允許使用者變更目錄設定,設為 AuthConfig 表示可以使用 AuthDBMGroupFile、 AuthDBMUserFile, AuthGroupFile、AuthName、AuthType 等認證的功能。 另外,在 AccessFileName 中,我們設定了用來保護目錄的設定檔名稱,預設為 .htaccess。

Apache 允許使用者在目錄下放置一個檔案來控制該目錄的存取權限,預設是使用 .htaccess。 我們可以自行用文書軟體編輯一個檔名為 .htaccess 的檔案來設定檔案所在目錄的權限。假設我們要保護的目錄是 /home/www/private/ 這個目錄,請新增一個文字檔 /home/www/private/.htaccess,內容如下:

AuthName "管理專區" 
AuthType "Basic" 
AuthUserFile "/var/http.pw"
require valid-user

其中請注意各參數的大小寫。這裡我們設定儲存使用者帳號及密碼的檔案是 /var/http.pw

接下來我們就可以新增使用者及密碼了。Apache 用來新增密碼的指令為 htpasswd:

# /usr/local/sbin/htpasswd -c /var/http.pw username 
New password: 輸入 username 的密碼
Re-type new password: 再輸入一次

上述指令會建立密碼檔 /var/http.pw 並加入使用者 username。如果您還要再加入第二個使用者,不需要加參數 -c。

接著,我們使用使用瀏覽器連到該目錄時,將出現下列畫面:

圖 14-3

此時輸入你設定的使用者名稱及密碼即可。若輸入的帳號密碼正確,即可正常看到該目錄的內容,否則在輸入三次錯誤之後,將出現禁止存取的頁面。

小提示

在您通過身份認證後,瀏覽器會自動將身份認證的資料暫存起來,以便下次連線時使用。所以在通過認證後,您不會每次要連受保護的目錄時都要輸入帳號密碼。如果您將瀏覽器關閉後,下次再連到該頁面時,才會再被要求輸入密碼。

14.3 虛擬主機

如果您想要使用一台主機管理多個不同名稱的網頁,例如,www.alexwang.com 及 www.twbsd.org 全都連到同一台伺服器,我們可以經由 Apache 虛擬主機的功能,讓不同的網址秀出不同的網頁內容。其本上,就是在一台機器上設定多個主機名稱或 IP,並依不同名稱來決定其根目錄所在。當使用者連線到我們的主機時,每一個不同的名稱所看到的根目錄都不同。

要達到這樣的功能,我們必須先確定主機有多個 DNS 名稱,這樣別人打該主機名稱才會對應到你的 IP。假設你的主機 IP 是 111.222.78.9 ,上面有二個主機名稱,一個是 www.abc.com,另一個是 www.cde.net。 您必須先在 DNS 中設定讓這二個主機名稱都可以對應到 11.22.78.9 這個 IP。

在確認 DNS 設定沒問題後,我們就可以開始設定 Apache 虛擬主機的功能了。請編輯 httpd.conf, 以載入虛擬主機設定檔:

# Virtual hosts
Include etc/apache22/extra/httpd-vhosts.conf

接著我們修改 /usr/local/etc/apache22/extra/httpd-vhost.conf 加入下列設定:

# 設定使用名稱的虛擬本機
NameVirtualHost *:80

# 設定 www.abc.com 的管理者帳號、存放網頁的目錄及log 所在
<VirtualHost *>
	ServerAdmin jack@abc.com
	DocumentRoot /home/www/abc
	ServerName www.abc.com
	ErrorLog /var/log/abc_error.log
	CustomLog /var/log/abc_access.log common
</VirtualHost>
# 設定 www.cde.com 的資料
<VirtualHost *>
	ServerAdmin tom@cde.net
	DocumentRoot /home/www/cde
	ServerName www.cde.net
	ErrorLog /var/log/cde_error.log
	CustomLog /var/log/cde_access.log common
</VirtualHost>

做完上面的設定後,就可以重新啟動 Apache 了。如果你還有別的 Domain Name 指向 111.222.78.9 的話,例如 www.fgh.org ,但你並未設定其 Virtual Host 資料,Apache 將以第一個設定的 Virtual Host 資料為主。在這個範例裡,當你打 www.fgh.org 會連到 www.abc.com 的設定。

必須要注意的是,有些客戶端的連線軟體並不支援 Name-Based 的虛擬主機,要支援 name-based virtual host,客戶端必須送出 HTTP 的標頭,也就是瀏覽器必須支援 HTTP/1.1。不過,請放心,我們常用的 IE、Netscape、lynx 都有支援。

14.4 網頁記錄分析

在我們將所製作好的網頁放在網頁伺服器之後,我們會想知道每一個網頁的瀏覽次數、使用者的停留時間等等,以做為改善網頁的依據。這些資訊都可以從 Apache 的連線記錄檔中獲得,但由於 Apache 的連線記錄中,只有一筆一筆使用者瀏覽網頁的記錄,我們需要使用一些工具來分析記錄檔,讓這些記錄檔能更易於閱讀。

本章將介紹 Webalizer 這套軟體。Webalizer 會讀取 Apache 的連線記錄檔,並將分析結果存成網頁,讓我們可以經由網頁的圖形更輕鬆的了解每一個頁面的使用情形。由於 Webalizer 所進行的分析是經由讀取 log 檔,因此 log 檔的資料越多,分析出來的結果也就越詳盡。

我們使用下列指令安裝 Webalizer:

# cd /usr/ports/www/webalizer
# make install clean

在安裝完 Webalizer 之後,我們必須先做一些簡單的設定。在 /usr/local/etc/ 有一個 Webalizer 的設定檔範例 webalizer.conf-dist,我們先將它複製一份再開始編輯:

# cp /usr/local/etc/webalizer.conf-dist /usr/local/etc/webalizer.conf
# ee /usr/local/etc/webalizer.conf

以下我們將一一說明此設定檔的內容,如果您想要更改其中的設定,請將該行開頭的井字號移除再開始修改:

# 設定 Apache 連線記錄檔的位置。
#LogFile        /var/lib/httpd/logs/access_log
LogFile        /var/log/httpd-access.log

# 設定 log 檔的型式,Webalizer 除了 Apache 外,還可以支援分析 FTP 軟體
# 或 proxy 軟體 squid 的 log 檔。LogType 預設的值是 'clf',表示分析
# 網頁資料,你也可以設定為 ftp 或 squid。
#LogType	clf

# OutputDir 是我們想要輸出分析資料的位置。請設定為網頁根目錄下的某一個
# 目錄。例如我們的網頁根目錄是 /home/www,請先在該目錄下建立一個子目錄
# 名為 traffic,接著再設定 OutputDir 為 /home/www/traffic。
#OutputDir      /var/lib/httpd/htdocs/usage
OutputDir      /home/www/traffic

# HistoryName 可以讓我們設定 webalizer 所產生的歷史記錄檔的檔名。這個檔
# 可以用來產生 主要的 HTML 頁面 (index.html),我們不需要修改。
#HistoryName	webalizer.hist

# 由於我們可能會設定某一段時間自動將 Apache 的 log 壓縮或刪除。而
# Incremental 這個變數可以讓我們在產生分析資料時,只更新增加的部份
# 而分析過的資料就不再分析,以免覆蓋了舊有的資料。
#Incremental	no
Incremental	yes

# 若您設定 Incremental 為 yes,IncrementalName 可以讓您設定目前增加
# 的分析資料存放位置。
#IncrementalName	webalizer.current

# ReportTitle 是分析結果網頁的標題。在該標題後會加上您的主機名稱。
#ReportTitle    Usage Statistics for

# 設定您的主機名稱。
#HostName       localhost

# HTMLExtension 是所產生的 HTML 檔的副檔名。
#HTMLExtension  html

# PageType 可以讓您設定何種副檔名結尾的頁面要加入分析資料。因為在
# log 檔中有一些圖片,而這些圖版我們並不希望加入分析資料中,或者我
# 們也可以增加 PHP 頁面的分析資料。所以在這裡,我們加上一行用來分析
# PHP 頁面的設定。
PageType	htm*
PageType	cgi
PageType	php
#PageType	phtml
#PageType	php3
#PageType	pl

# 如果您希望只使用 https 才可以連到分析頁面,則將 UseHTTPS 設為 yes。
#UseHTTPS       no

# DNSCache 可以設定 DNS 快取的檔案名稱,在分析資料時,可能會一直需要
# 做 DNS 的分析,這個檔可以提高 DNS 查詢的效率。
#DNSCache	dns_cache.db

# DNSChildren 可以設定要使用多少 process 來做 DNS 查詢,預設是 0,表示
# 不查詢,我們可以設定的值從 1 到 100。最好不要設太多,以免消耗太多系統
# 資源。
#DNSChildren	0

# HTMLPre 是用設定每個 HTML 檔案開頭第一行要插入的字,最長 80 個字元。
#HTMLPre <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">

# HTMLHead 可以讓我們設定 HTML 頁面 <HEAD></HEAD> 中間要插入的字。最長
# 也是 80 個字元。
#HTMLHead <META NAME="author" CONTENT="The Webalizer">

# HTMLBody 會取代在 HTML 頁面中的 <BODY>  這個標籤。可以讓我們設定網頁
# 的一些屬性。最長也是 80 個字元。
#HTMLBody <BODY BGCOLOR="#E8E8E8" TEXT="#000000" LINK="#0000FF" VLINK="#FF0000">

# HTMLPost 會將設定的字串插入 HTML 第一個 <HR> 標籤之後,最長也是 80 個
# 字。
#HTMLPost 	<BR CLEAR="all">

# HTMLTail 可以設定 HTML 頁面的結尾所要插入的字串。最長 80 個字元。
#HTMLTail <IMG SRC="msfree.png" ALT="100% Micro$oft free!">

# HTMLEnd可以設定 HTML 頁面的最後結尾所要插入的字串。我們最少要有
# </BODY> 和 </HTML> 這二個標籤,最長 80 個字元。
#HTMLEnd </BODY></HTML>

# Quiet 可以讓我們設定在分析時是否要輸出訊息,因為我們會使用 crontab
# 定時執行,所以不要輸出分析過程的訊息比較好。
Quiet		yes

# ReallyQuiet 可以設定檔有錯誤產生時,是否要輸出訊息。
#ReallyQuiet	no

# TimeMe 可以設定在分析之後是否要輸出時間。
#TimeMe		no

# GMTTime 可以設定是否要使用 GMT (UTC) 時間而非本地時間。
#GMTTime		no

# Debug 可以設定是否要輸出除錯訊息。
#Debug		no

# FoldSeqErr 可以讓 Webalizer 忽略讀取 log 檔的錯誤。
#FoldSeqErr	no

# VisitTimeout 可以設定 session 的到期時間,預設值是 30 分鐘。
#VisitTimeout	1800

# IgnoreHist 請保持 no。
#IgnoreHist	no

# Country Graph 是用來顯示分析資料中關於國家的統計資料是否要顯示。
#CountryGraph	yes

# DailyGraph 及 DailyStats 是設定是否顯示每日分析資料。
#DailyGraph	yes
#DailyStats	yes

# HourlyGraph 是 HourlyStats是設定是否顯示每小時分析資料。
#HourlyGraph	yes
#HourlyStats	yes

# GraphLegend 是設定是否要顯示彩色圖表。
#GraphLegend	yes

# GraphLines 是用來設定圖表的格線數量,最多 20。
#GraphLines	2

# "Top" 的選項是每一個分格表格中,要顯示多少筆前幾名的資料。
#TopSites        30
#TopKSites       10
#TopURLs         30
#TopKURLs        10
#TopReferrers    30
#TopAgents       15
#TopCountries    30
#TopEntry        10
#TopExit         10
#TopSearch       20
#TopUsers        20

# The All* 可以讓我們顯示所有 log 檔中有記錄的資料,而非只有前幾名而
# 已。如果設定了某一個 All 的選項,webalizer 將會為該設定新增一個頁面。
#AllSites	no
#AllURLs	no
#AllReferrers	no
#AllAgents	no
#AllSearchStr	no
#AllUsers       no

# Webalizer 會自動使用讓網址 /somedir/ 可以連結到 /somedir/index.htm
# 如果你想要設定讓除了 index. 結尾的網址有此效果外,還要讓其它網
# 址也有同樣效果,您可以在此設定。
#IndexAlias     home.htm
#IndexAlias	homepage.htm

# Hide*, Group*, Ignore* 及Include* * 可以設定讓 Webalizer 忽略
# log 中的關鍵字,讓 log 中某些記錄不要被加入分析資料中。例如
# 有的搜尋引擎會自動連到您的網頁來找資料,您可以設定忽略這樣的
# 連線。請自行參閱說明。
… 略 …
# End of configuration file...  Have a nice day!

接著我們必須依您的設定在網頁根目錄中建立一個資料夾以儲存 Webalizer 所產生的圖表,假設我們的網頁根目錄是 /home/www,並在其目錄下建立一個子目錄名為 traffic

# mkdir /home/www/traffic

緊接著我們就可以使用下列指令來產生統計圖表:

# /usr/local/bin/webalizer

因為我們在 webalizer.conf 中設定了所要使用的 apache 使用記錄的檔名及所產生的圖表存放位置,所以在執行 webalizer 時不必再加任何參數。如果您想指定使用其他的連線記錄檔來做分析,您可以在指令後面加上該記錄檔的檔名,例如:

# /usr/local/bin/webalizer /var/log/httpd-access.log

產生了圖表之後,我們就可以使用瀏覽器輸入 http://www.mydomain.com/traffic 連到該網頁。連到該頁面後,您可以看到下列畫面:

圖 14-5

我們可以看到八月份每天平均有 294 人造訪,該月共有 7945 人。點選了該月份後,可以再看該月份更詳細的資料。例如,一天中哪一個時間最多人造訪、哪一個網頁最點選最多次、使用者來源、進到本網站後第一個看的頁面是什麼等等。下圖為最常被點選的頁面統計:

圖 14-6

最後,為了讓分析圖表能定時自動更新,我們可以使用 crontab 每小時定期執行一次分析。

# crontab -e
13      *       *       *       *       /usr/local/bin/webalizer

在上述的 crontab 的設定中,我們讓系統在每小時的第 13 分時執行一次 webalizer,您也可以依您的需求調整更新的時間。存檔離開之後,crontab 會自動載入新的設定,如此一來我們就可以隨時擁有最新的統計資訊了。

14.5 MRTG 流量分析

我們除了可以使用 Webalizer 來了解網頁內容的使用情形外,網站管理者還必須知道目前網站頻寬是否足夠。如果您想要知道網站流量的使用情形,我們可以安裝 MRTG 這套軟體經由網頁來監看網路流量。MRTG 會去收取 SNMP (Simple Network Management Protocol) 所產生的資料,因此所要記錄的機器必須要安裝 SNMP。在你的主機上安裝 MRTG 後,你不僅可以收集自己的流量資料,也可以收集區域網路上其他可以接收到的 SNMP 資料。

14.5.1 安裝 SNMP

在安裝 MRTG 之前,我們先使用 ports 來安裝 SNMP:

# cd /usr/ports/net-mgmt/net-snmp
# make install clean

安裝完成後,我們必須要先新增一個可以讀取 SNMP 資訊的 community name。所謂的 community name 是一個明碼的字串,我們可以將它視為 management station 和 agent 之間的密碼,是 MRTG 和 net-SNMP 溝通時必須要先傳送的字串。我們可以依不同的網域或主機給予不同的權限,依 community name 的設定來決定不同權限。

一個網路元件可以有多個 community name,一般 SNMP Agent 所預設公開的 community name 是 public。我們不一定要將 community name 設定為 public,因為 public 是一般 SNMP 的預設值,為了安全的問題,我們不將它設為 public。這裡我們將設定 community name 為 mrtg,而且只有 read only 的權限。

要設定 community name 請先新增一個文字檔 /usr/local/share/snmp/snmpd.conf 並加入下列設定:

rocommunity     mrtg
syslocation     Office
syscontact      alex@alexwang.com

上述設定中,mrtg 為唯讀的 community name,Office 是您機器所在位置,而 syscontact 所接的字串是您的 Eamil。另外, 我們還必須在 /etc/rc.conf 中加入下列這一行:

snmpd_enable="YES"

接著,請使用下列指令啟動 SNMP:

# /usr/local/etc/rc.d/snmpd start

14.5.2 安裝 MRTG

我們使用 ports 來安裝 MRTG:

# cd /usr/ports/net-mgmt/mrtg
# make install

接著要產生 MRTG 的設定檔

# cd /usr/local/etc/mrtg
# rehash
# cfgmaker mrtg@alexwang.com >mrtg.cfg

這裡的 mrtg 是我們在安裝 net-snmp 時所設定的值。如果你使用錯的 community name,你可能會從要記錄的設備上得到錯誤回應。而 alexwang.com 是你所要記錄的主機位置。mrtg.cfg 就是所要產生的設定檔名。

如果您想要記錄多個主機,只要在 cfgmaker 時多加入主機名稱即可,例如:

# cfgmaker mrtg@alexwang.com public@ftp.alexwang.com >mrtg.cfg

這樣就會同時記錄上面二台主機的流量了。

產生基本的設定檔後,我們可以再編輯剛才產生的設定檔 ee mrtg.cfg,在檔案開頭的部份加入一些客製化的設定:

# 如果要使用中文的 MRTG 則加入下面這一行
Language: big5

# 設定你的 MRTG 要放在哪個目錄,應該要放在網頁可以
# 連結到的地方,我的網頁根目錄是 /home/www,所以我將
# MRTG 放在下面的目錄。
WorkDIR:/home/www/mrtg

# 預設的 MRTG 所產生的圖時間是由右到左
# 我喜歡由左到右,故加入下面這一行
Options[_]: growright

接著請建立一個你在 mrtg.cfg 中設定的 WorkDIR 的目錄:

# mkdir /home/www/mrtg

然後使用指令 indexmaker 來建立 MRTG 的首頁:

# indexmaker -title '流量統計' -output /home/www/mrtg/index.html mrtg.cfg

這裡的參數 -title 是該 index.html 檔的 title,而 -output 就是要輸出的檔案位置,預設是stdio(通常指的是螢幕) 。

輸出的檔案 index.html 你也可以使用其他的網頁編輯軟體再去修改美化它。接下來要將 MRTG 的一些圖片檔複製到 mrtg 的目錄裡:

# cd /usr/ports/net-mgmt/mrtg/work/mrtg-*
# cd images
# cp * /home/www/mrtg/

最後執行 MRTG:

# env LANG=C /usr/local/bin/mrtg /usr/local/etc/mrtg/mrtg.cfg

第一次執行上面的指令可能會有一些錯誤訊息,不要理它,因為是第一次執行 mrtg,所沒有一些舊的圖,只要再多執行幾次就好了。沒問題之後,使用指令 crontab -e 來 讓上述指令每 5 分鐘執行一次,加入下面這一行:

*/5    *    *    *    *    env LANG=C /usr/local/bin/mrtg  /usr/local/etc/mrtg/mrtg.cfg

現在你可以使用 http://yourserver/mrtg 來連去看看。

圖 14-7

最後別忘了移除安裝過程的暫存檔:

# cd /usr/ports/net-mgmt/mrtg/
# make clean