(八)
用於設定訪問控制的設定主要是針對目錄和文件進行設定的,然而也可以針對不同的URL進行訪問控制的設定,這樣就不必擔心ScriptAlias、Alias是否將路徑設定到了受控制的目錄之外了。針對URL進行控制的語句為 Location語句,這樣不但能對伺服器上的文件、CGI提供保護,此外,它還能保護不能找到對應文件,而是由伺服器本身提供的特殊功能URL。http://servername/server-status用於報告當前Apache伺服器的狀態,http://servername/server-info用於報告Apache 伺服器的統計資訊。與此相關的設定還有ExtendedStatus參數,可以讓伺服器輸出更詳細的的報告。
#
#ProxyRequests On
#
#
# Order deny,allow
# Deny from all
# Allow from .your_domain.com
#
#ProxyVia On
#快取Root "/www/proxy"
#快取Size 5
#快取GcInterval 4
#快取MaxExpire 24
#快取LastModifiedFactor 0.1
#快取DefaultExpire 1
#No快取 a_domain.com another_domain.edu joes.garage_sale.com
#
Apache伺服器本身就具備代理的功能,然而這要求載入入mod_proxy模組。這能使用IfModule語句進行判斷,如果存在mod_proxy模組,就使用ProxyRequests開啟代理支持。此後的Directory用於設定對Pro xy功能的訪問權限設定,以及用於設定緩衝的各個參數設定。
虛擬主機
#NameVirtualHost 12.34.56.78:80
#NameVirtualHost 12.34.56.78
#
# ServerAdmin
webmaster@host.some_domain.com
# DocumentRoot /www/docs/host.some_domain.com
# ServerName host.some_domain.com
# ErrorLog logs/host.some_domain.com-error_log
# CustomLog logs/host.some_domain.com-access_log common
#
#
預設設定文件中的這些內容是用於設定命名基礎的虛擬主機伺服器時使用。
其中NameVirtualHost 來指定虛擬主機使用的IP位址,這個IP位址將對應多個 DNS名字,如果Apache使用了Listen 參數控制了多個連接阜,那麼就可以在這裡加上連接阜號以進一步進行區分對不同連接阜的不同連接請求。此後,使用 VirtualHost 語句,使用NameVirtualHost指定的IP位址作參數,對每個名字都定義對應的虛擬主機設定。
虛擬主機是在一台Web伺服器上,可以為多個單獨域名提供Web服務,並且每個域名都完全獨立,包括具有完全獨立的文件目錄結構及設定,這樣域名之間完全獨立,不但使用每個域名訪問到的內容完全獨立,並且使用另一個域名無法訪問其他域名提供的網頁內容 。
虛擬主機的概念對於ISP來講非常有用,因為雖然一個組織可以將自己的網頁掛在具備其他域名的伺服器上的下級往址上,但使用獨立的域名和根網址更為正式,易為眾人接受。傳統上,必須自己設立一台伺服器才能達到單獨域名的目的,然而這需要維護一個單獨的 伺服器,很多小服務機構缺乏足夠的維護能力,更為合適的方式是租用別人維護的伺服器。ISP也沒有必要為一個機構提供一個單獨的伺服器,完全可以使用虛擬主機能力,使伺服器為多個域名提供Web服務,而且不同的服務互不干擾,對外就表現為多個不同的伺服器。
有兩種設定虛擬主機的方式,一種是關於HTTP 1.0標準,需要一個具備多IP位址的伺服器,再組態DNS 伺服器,給每個IP位址以不同的域名,最後才能組態Apache的組態文件,使伺服器對不同域名返回不同的Web文件。由於這需要使用額外的IP位址,對每個要提供服務的域名都要使用單獨的IP位址,因此這種方式實現起來問題較多。
可以在一個網路界面上綁定多個IP位址,Linux下需要使用ifconfig的 alias參數來進行這個組態,但此時會影響網路效能。
HTTP 1.1標準在傳輸協定中規定了對瀏覽器和伺服器通信時,伺服器能夠跟蹤瀏覽器請求的是哪個主機名字。因此可以利用這個新特性,使用更輕鬆的方式設定虛擬主機。這種方式不需要額外的IP位址,但需要新版本的瀏覽器支持。這種方式已經成為建立虛擬主機的標準方式。
要建立非IP基礎的虛擬主機,多個域名是不可少的組態,因為每個域名就對應一個要服務的虛擬主機。因此需要更改DNS伺服器的組態,為伺服器增加多個C NAME選項,如:
linux IN A 192.168.1.64
vhost1 IN CNAME linux
vhost2 IN CNAME linux
基本的設定選項都是為了linux主機設定的,如果要為vhost1和vhost2設定虛擬主機,就要使用VirtualHost語句定義不同的選項,在語句中可以使用組態文件前面中的大部分選項,而可以重新定義幾乎所有的針對伺服器的設定。
NameVirtualHost 192.168.1.64
DocumentRoot /www/data
ServerName linux.example.org.cn
DocumentRoot /vhost1
ServerName vhost1.example.org.cn
DocumentRoot /vhost2
ServerName vhost2.example.org.cn
這裡需要注意的是,VirtualHost的參數位址一定要和NameVirtualHost定義的位址相一致,必須保證所有的值嚴格一致,Apache伺服器才承認這些定義是為這個IP位址定義的虛擬主機。
此外,定義過NameVirtualHost之後,那麼對這個IP位址的訪問都被區分不同的虛擬主機進行處理,而對其他IP位址的訪問,例如127.0.0.1,才套用前面定義的預設選項。