。
在這種情況下,在WWW上保證可以使用的唯一認證機制是由HTTP本身提供 的。在標準的Apache伺服器實現了這樣的認證,它能控制哪些主機可能訪問特定的網站或特點的網站的一部分。
這種認證可以分為兩種,一種是基於主機的的認證,另一種是基於使用者名稱/口令的認證。由於互連網上的決大多數使用者的IP地址是動態獲得的,所以基於主機的認證方式並不總適用。所以在大多數情況下,傳統的基於使用者名稱/口令的認證方式更為現實。下面我們就對這兩種認證的實現做一簡要的介紹。
8.1 基於主機的認證方式
在種認證模式顧名思義,訪問是用主機名稱或主機IP地址來控制的。支援這種認證方式的是Apache的mod_access模組,這個模組預設狀態下是被安裝了的。該模組用以下幾種Apache命令來提供存取控制功能。
allow命令
文法:allow from host1 host2 host3 ...
這個命令定義了允許訪問網站或目錄的主機清單。主機清單可以用以下幾
種形式表示:
ALL:代表所有主機;
主機的全網域名稱,如:www.mot.com;
主機的部分網域名稱,如:.mot.com;
完整的IP地址,如:202.98.2.32;
部分IP地址,如:202.98
網路地址/網路遮罩對,如:202.98.0.0/255.255.0.0
網路地址/nn(CIDR定義),如:202.98.0.1/16
deny命令
文法:deny from host1 host2 host3 ...
這個命令定義了禁止訪問網站或目錄的主機清單,其他與allow命令相似。
order命令
文法:order deny,allow | allow,deny
這個命令定義評價allow和deny命令的先後順序。
例如:
<Directory /home/httpd/html>
order deny,allow
deny from www.mot.com
allow all
</Directory>
這組命令設定了禁止www.mot.com訪問/home/httpd/html目錄下的檔案。
請大家注意,順序是先deny後allow,如果是:order allow,deny 那麼,先允許所有的主機訪問,然後再禁止,這樣是無效的,所有主機仍然能夠訪問。
8.2 基於使用者名稱/口令的認證方式
這種認證方式其實相當簡單,當WWW瀏覽器請求經此認證模式保護的URL
時,將會出現一個對話方塊,要求使用者鍵入使用者名稱和口令。使用者輸入後,傳給WWW伺服器,WWW伺服器驗證它的正確性,如果正確,返回頁面,否則返回401錯誤。要說明的一點是,這種認證模式是基本的,並不能用於安全性要求極高的場合。
Apache中有許多模組可以支援這種認證方式,下面我們就介紹一下最基本、最標準的mod_auth模組。正如前面提到的一樣,mod_auth模組使用儲存在文字檔中的使用者名稱、組名和口令來實現認證。這種方法非常適合處理少量使用者,它能工作得很好。如果你需要對大量的使用者,如數以千計的使用者做認證時,這種方法的效能將急劇下降到不可忍受,所以當這種情況下,就需要考慮使用mod_dbm模組或mod_mysql模組來獲得更好的效能。
執行個體一:需要使用者名稱和口令的存取控制
下面我們就一起來看一下如何建立需要使用者名稱/口令才能進行訪問的目錄。
基本情況: www.xxx.com
的網站有設定為:
DocumentRoot /home/httpd/html
AccessFileName .htaccess
AllowOverride All
需求:限制/home/httpd/html/backup/目錄的訪問,只允許使用者“super”以口令“fill-06”訪問此目錄。
實現步驟:
使用htpasswd建立使用者檔案
htpasswd –c /home/httpd/secr/.htpasswd super
此程式會詢問使用者“super”的口令,你輸入“fill-06”,兩次生效。
建立.htaccess檔案
用vi在/home/httpd/html/backup/目錄下建立一個檔案.htaccess,寫入
以下幾行:
AuthName My Friend Only (註:這個名字是任取的)
AuthType Basic
AuthUserFile /home/httpd/secr/.htpasswd
require user super
設定檔案許可權,確保Apache使用者有讀的許可權
這樣就完成了設定工作,你可以試一試效果了。
執行個體二:允許一組使用者訪問一個目錄
假設,現在www.xxx.com想讓myfriend組中的mf1與mf2兩個使用者分別能
使用口令“mf001-1”“mf002-2”訪問/home/httpd/html/backup/目錄。
實現步驟:
使用htpasswd建立使用者檔案
htpasswd –c /home/httpd/secr/.htpasswd mf1
htpasswd –c /home/httpd/secr/.htpasswd mf2
建立組檔案
用vi/home/httpd/secr/目錄下建立一個檔案.htgroup,寫入:
myfriend:mf1 mf2
建立.htaccess檔案
用vi在/home/httpd/html/backup/目錄下建立一個檔案.htaccess,寫入
以下幾行:
AuthName My Friend Only
AuthType Basic
AuthUserFile /home/httpd/secr/.htpasswd
AuthGroupFile /home/httpd/secr/.htgroup
require group myfriend
配置工作到此結束,試一試吧!
執行個體三:混合使用基於主機與基於使用者名稱/口令的認證方式
如果你除了只允許讓mf1與mf2兩個使用者訪問外,還想禁止除www.mot.com
外的主機訪問這個目錄的話,就將/home/httpd/html/backup/.htaccess修改成為:
AuthName My Friend Only
AuthType Basic
AuthUserFile /home/httpd/secr/.htpasswd
AuthGroupFile /home/httpd/secr/.htgroup
require group myfriend
order deny,allow
deny from all
allow from www.mot.com
九、解讀Apache日誌
當你一步步地看到這裡的時候,相信你的WWW網站已經建好,並且已經在
Internet上展現出來了。這時你可能就會關心誰造訪過你的網站,或者想知道你的Apache伺服器現在的運行狀態與效能如何。下面我們一起通過解讀Apache的日誌來實現這個偉大的願望。
9.1 盯著Apache伺服器
Apache允許通過WWW監視伺服器的配置資訊與運行狀態。
1.觀看配置資訊
如果你的Apache象預設配置一樣加入了mod_info模組的話,你就可以通過訪問http://localhost/server-info查看伺服器資訊。
2.使用狀態頁
如果你的Apache象預設配置一樣加入了mod_status模組的話,你就可以
通過訪問http://localhost/apache-status查看伺服器的運行狀態資訊,其中包括:
¨ 伺服器系統的目前時間;
¨ 伺服器最近一次重啟時間;
¨ 伺服器啟動後的已耗用時間;
¨ 到目前為止服務的訪問總數;
¨ 到目前為止傳輸的位元組總數;
¨ 服務要求的子進程數;
¨ 空閑子進程數;
¨ 每個進程狀態、子進程服務的請求數以及該子進程傳輸的位元組總數;
¨ 每秒平均請求數、每秒傳輸的位元組數、每次請求平均傳輸位元組數;
¨ 目前每個子進程CPU佔用及Apache的總的CPU佔用率;
¨ 當前主機及處理的請求。
9.2 什麼是記錄檔
記錄檔是Apache工作的記錄,Apache包括了mod_log_config模組,它
用來記錄日誌。在預設情況下,它用通用日誌格式CLF規範來寫。
CLF記錄檔內對每個請求均有一個單獨行,形如:
host ident anthuser date request status bytes
其含義如下:
¨ host用戶端主機的全稱網域名稱或IP地址;
¨ ident存放用戶端報告的識別資訊;
¨ authuser如果是基於使用者名稱認證的話,值為使用者名稱;
¨ date請求的日期與時間;
¨ request用戶端的請求行;
¨ status返回到用戶端的三們數位HTTP狀態代碼;
¨ bytes除去HTTP頭標外,返回給用戶端的位元組數。
9.3 分析記錄檔
有了記錄檔後,我們可以利用UNIX的一些工具和一此專門的日誌分析工具對記錄檔進行分析。
執行個體一:列出訪問過本網站的主機名稱或IP:
對於這個需求,我們可以通過一個Unix的一個指令碼語句來完成:
cat /var/log/httpd/access_log | awk ‘{print $1}'
用上面的方法雖然可以得到訪問過本網站的主機名稱或IP,但是由於有些是多次訪問的,我們希望在上面得到的結果的基礎上做一些最佳化,使得列出的表中,每個主機只出現一次。我們可以使用:
cat /var/log/httpd/access_log | awk ‘{print $1}' | wc –l
3.當然,我們可以根據需要選擇第三方提供日誌分析工具甚至自己開發一些日誌分析工具來滿足我們的需求。常見的第三方日誌分析工具有:WebTrends、Wusage、wwwstat、http-analyze、pwebstats、WebStat Explorer、AccessWatch。
9.4 一些提示
日誌一方面是我們分析網站的第一手資料,一方面卻是吞噬大量磁碟空間的罪魁禍首。所以別忘了定期轉儲或刪除一些老的記錄檔。
十、Apache與Proxy 伺服器
Proxy 伺服器是位於客戶和客戶要訪問的伺服器之間的系統。當客戶機使用URL請求訪問遠端資源時,Proxy 伺服器接受該請求並取得該資源以滿足客戶機的請求。在通常情況下,Proxy 伺服器是客戶機的伺服器,同時也是遠程伺服器的客戶。
Proxy 伺服器可以在自己的緩衝區中儲存被請求的內容,當這些資訊再次被請求的時候,Proxy 伺服器就無需再從遠程伺服器上取了,這樣Proxy 伺服器就減輕了網路的瓶頸問題。
Apache可以配置成為Proxy 伺服器。
10.1 前向Proxy 伺服器和逆向Proxy 伺服器
1.前向Proxy 伺服器
前向Proxy 伺服器通常位於使用者主機和要訪問的遠程網路之間。它從遠程伺服器取得所要求的資源,然後返回給使用者,同時存在磁碟上,以供下次使用。
在這種情況下,用戶端的主機知道它們正在使用Proxy 伺服器,因為每個主機都必須配置為使用Proxy 伺服器。
例如,必須告訴WWW瀏覽器使用Proxy 伺服器,它才能使用Proxy 伺服器。所有的遠程請求都通過Proxy 伺服器傳輸。
這類Proxy 伺服器也稱為緩衝Proxy 伺服器。逆向伺服器也可以緩衝資料,但它的作用愉好與前向伺服器相反。
前向Proxy 伺服器的結構圖如下所示:
圖4 前向Proxy 伺服器
2.逆向Proxy 伺服器
逆向Proxy 伺服器位於互連網資源前面,逆向伺服器從原始伺服器找到被請求的資源,並反它返回給使用者主機。
與前向Proxy 伺服器不同的是,逆向Proxy 伺服器的使用者並不知道它們串連的是Proxy 伺服器而不是資原始伺服器本身。其結構如所示:
圖5 逆向Proxy 伺服器
10.2 配置Proxy 伺服器
為了允許Apache作為Proxy 伺服器,需要將ProxyRequests設為On,然後根據你希望Proxy 伺服器做什麼而增加什麼附加配置。無論你希望做什麼,你所選的代理配置都應該放入一個特殊的<Directory>容器中。
<Directory proxy:*>
…
</Directory>
執行個體一:將私人IP網連到互連網
假設私人網上只有一台電腦被分配了互連網上合法的IP地址,這台計算
機運行ApacheProxy 伺服器,ProxyRequest設定為On,並且不需要附加其他配置,所有請求均可由這台Proxy 伺服器代理服務。
執行個體二:讓Apache允當遠程WWW網站的緩衝
第一步:將ProxyRequest設定為On
第二步:建立配置如下:
<Directory proxy:*>
CacheRoot /www/cache
CacheSize 1024
CacheMaxExpire 24
</Directory>
這裡的意思是設定Cache目錄為/www/cache;大小為1024KB,即1MB;緩衝中的內容在24小時後失效。
執行個體三:建立鏡像網站(其實這也就是所謂的逆向Proxy 伺服器)
第一步:將ProxyRequest設定為On
第二步:建立配置如下:
<Directory proxy:*>
ProxyPass / www.mot.com /
CacheRoot /www/cache
CacheDefaultExpire 24
</Directory>
10.3 一些提示
Proxy 伺服器,我們將會在後面的章節中詳細介紹,這裡只是針對Apache的功能介紹的。用Apache作Proxy 伺服器的效能並不高,效果並不好。不建議使用。