Linux Apache Web 服務器(續三)
2024-08-27 18:30:14
供稿:網友
。
在這種情況下,在WWW上保證可以使用的唯一認證機制是由HTTP本身提供 的。在標準的Apache服務器實現了這樣的認證,它能控制哪些主機可能訪問特定的站點或特點的站點的一部分。
這種認證可以分為兩種,一種是基于主機的的認證,另一種是基于用戶名/口令的認證。由于互聯網上的決大多數用戶的IP地址是動態獲得的,所以基于主機的認證方式并不總適用。所以在大多數情況下,傳統的基于用戶名/口令的認證方式更為現實。下面我們就對這兩種認證的實現做一簡要的介紹。
8.1 基于主機的認證方式
在種認證模式顧名思義,訪問是用主機名或主機IP地址來控制的。支持這種認證方式的是Apache的mod_access模塊,這個模塊缺省狀態下是被安裝了的。該模塊用以下幾種Apache命令來提供訪問控制功能。
allow命令
語法:allow from host1 host2 host3 ...
這個命令定義了允許訪問站點或目錄的主機清單。主機清單可以用以下幾
種形式表示:
ALL:代表所有主機;
主機的全域名,如:;
主機的部分域名,如:.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
allow all
</Directory>
這組命令設置了禁止訪問/home/httpd/html目錄下的文件。
請大家注意,順序是先deny后allow,如果是:order allow,deny 那么,先允許所有的主機訪問,然后再禁止,這樣是無效的,所有主機仍然能夠訪問。
8.2 基于用戶名/口令的認證方式
這種認證方式其實相當簡單,當WWW瀏覽器請求經此認證模式保護的URL
時,將會出現一個對話框,要求用戶鍵入用戶名和口令。用戶輸入后,傳給WWW服務器,WWW服務器驗證它的正確性,如果正確,返回頁面,否則返回401錯誤。要說明的一點是,這種認證模式是基本的,并不能用于安全性要求極高的場合。
Apache中有許多模塊可以支持這種認證方式,下面我們就介紹一下最基本、最標準的mod_auth模塊。正如前面提到的一樣,mod_auth模塊使用存儲在文本文件中的用戶名、組名和口令來實現認證。這種方法非常適合處理少量用戶,它能工作得很好。如果你需要對大量的用戶,如數以千計的用戶做認證時,這種方法的性能將急劇下降到不可忍受,所以當這種情況下,就需要考慮使用mod_dbm模塊或mod_mysql模塊來獲得更好的性能。
實例一:需要用戶名和口令的訪問控制
下面我們就一起來看一下如何建立需要用戶名/口令才能進行訪問的目錄。
基本情況:
的站點有設置為:
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用戶有讀的權限
這樣就完成了設置工作,你可以試一試效果了。
實例二:允許一組用戶訪問一個目錄
假設,現在想讓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兩個用戶訪問外,還想禁止除
外的主機訪問這個目錄的話,就將/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
九、解讀Apache日志
當你一步步地看到這里的時候,相信你的WWW站點已經建好,并且已經在
Internet上展現出來了。這時你可能就會關心誰造訪過你的站點,或者想知道你的Apache服務器現在的運行狀態與性能如何。下面我們一起通過解讀Apache的日志來實現這個偉大的愿望。
9.1 盯著Apache服務器
Apache允許通過WWW監視服務器的配置信息與運行狀態。
1.觀看配置信息
如果你的Apache象缺省配置一樣加入了mod_info模塊的話,你就可以通過訪問查看服務器信息。
2.使用狀態頁
如果你的Apache象缺省配置一樣加入了mod_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與代理服務器
代理服務器是位于客戶和客戶要訪問的服務器之間的系統。當客戶機使用URL請求訪問遠程資源時,代理服務器接受該請求并取得該資源以滿足客戶機的請求。在通常情況下,代理服務器是客戶機的服務器,同時也是遠程服務器的客戶。
代理服務器可以在自己的緩沖區中存儲被請求的內容,當這些信息再次被請求的時候,代理服務器就無需再從遠程服務器上取了,這樣代理服務器就減輕了網絡的瓶頸問題。
Apache可以配置成為代理服務器。
10.1 前向代理服務器和逆向代理服務器
1.前向代理服務器
前向代理服務器通常位于用戶主機和要訪問的遠程網絡之間。它從遠程服務器取得所要求的資源,然后返回給用戶,同時存在磁盤上,以供下次使用。
在這種情況下,客戶端的主機知道它們正在使用代理服務器,因為每個主機都必須配置為使用代理服務器。
例如,必須告訴WWW瀏覽器使用代理服務器,它才能使用代理服務器。所有的遠程請求都通過代理服務器傳輸。
這類代理服務器也稱為緩沖代理服務器。逆向服務器也可以緩沖數據,但它的作用愉好與前向服務器相反。
前向代理服務器的結構圖如下所示:
圖4 前向代理服務器
2.逆向代理服務器
逆向代理服務器位于互聯網資源前面,逆向服務器從原始服務器找到被請求的資源,并反它返回給用戶主機。
與前向代理服務器不同的是,逆向代理服務器的用戶并不知道它們連接的是代理服務器而不是資源服務器本身。其結構如下圖所示:
圖5 逆向代理服務器
10.2 配置代理服務器
為了允許Apache作為代理服務器,需要將ProxyRequests設為On,然后根據你希望代理服務器做什么而增加什么附加配置。無論你希望做什么,你所選的代理配置都應該放入一個特殊的<Directory>容器中。
<Directory proxy:*>
…
</Directory>
實例一:將私有IP網連到互聯網
假設私有網上只有一臺計算機被分配了互聯網上合法的IP地址,這臺計算
機運行Apache代理服務器,ProxyRequest設置為On,并且不需要附加其他配置,所有請求均可由這臺代理服務器代理服務。
實例二:讓Apache允當遠程WWW站點的緩沖
第一步:將ProxyRequest設置為On
第二步:創建配置如下:
<Directory proxy:*>
CacheRoot /www/cache
CacheSize 1024
CacheMaxExpire 24
</Directory>
這里的意思是設置Cache目錄為/www/cache;大小為1024KB,即1MB;緩沖中的內容在24小時后失效。
實例三:建立鏡像站點(其實這也就是所謂的逆向代理服務器)
第一步:將ProxyRequest設置為On
第二步:創建配置如下:
<Directory proxy:*>
ProxyPass / /
CacheRoot /www/cache
CacheDefaultExpire 24
</Directory>
10.3 一些提示
代理服務器,我們將會在后面的章節中詳細介紹,這里只是針對Apache的功能介紹的。用Apache作代理服務器的性能并不高,效果并不好。不建議使用。