Ubuntu Linux下配置虛擬主機及其配置檔案詳細說明
用Apache配置虛擬主機
apache不僅支援基於域名的虛擬主機,還支援基於IP的虛擬主機,每一個apache虛擬主機都有單獨的配置檔案在/etc/apache2/sites-available中,default是預設的虛擬主機,這個虛擬主機在安裝時已經被連結到 /etc/apache2/sites-enabled 目錄下,在瀏覽器中訪問伺服器IP地址,將會出現 “It Works”。
建立一個新的虛擬主機:
假設我們要建立一個域名為 blog.mytest.com 的虛擬主機,先將default虛擬主機複製一份,以便在此基礎上修改。
sudo cp /etc/apache2/sites-available/default /etc/apache2/sites-available/blog.mytest.com
在用編輯器編輯配置檔案,sudo nano /etc/apache2/sites-available/blog.mytest.com
在開啟的編輯器中,將第一行NameVirtualHost指令刪除,然後將DocumentRoot的路徑修改為 /var/www/blog.mytest.com/,
將<Directory /var/www/>修改為<Directory /var/www/blog.mytest.com/>,然後儲存。
如果有多個虛擬主機,建議修改ErrorLog和CustomLog的路徑,這樣可以把每個虛擬主機的日誌分開,有利於管理維護。
當儲存完後建立相應目錄,sudo mkdir /var/www/blog.mytest.com ,並建立一個index.html檔案,寫入測試內容如:"<h1>Oh yeah</h1>",到此虛擬主機建立完成。
然後禁用default虛擬主機,啟用新建的blog.mytest.com虛擬主機,sudo a2dissite default && sudo a2ensite blog.mytest.com
再重啟apache sudo /etc/init.d/apache2 restart
虛擬主機配置詳解:
以預設的default虛擬主機為例,來對虛擬主機配置檔案中的各個指令進行介紹
(1) NameVirtualHost指令
該指令用來指定伺服器的IP地址,如NameVirtualHost 192.168.1.10:8080,當伺服器有多個網絡卡,多條線路時,通過這條指令可以設定某個網站只能從某個網絡卡走。如果不指定IP,而已 * 代替,則該虛擬主機可以從所有網絡卡走。注意,在整個系統中,該指令只要有一個即可,所以可只保留default虛擬主機中的該指令,其他虛擬主機全部刪除該指令。
(2)<VirtualHost></VirtualHost>指令
在該指令內部包含了一組其他指令,且這些指令只作用於當前虛擬主機。和NameVirtualHost指令類似,<VirtualHost>指令中的IP地址,也可用星號來表示本機所有的IP地址。
(3)ServerAdmin指令
用於指定站長的E-mail地址,當用戶訪問該網站時,如果遇到錯誤,則apache將顯示這個E-mail,使用者可以藉此和站長聯絡。
(4)DocumentRoot指令
指定網站根目錄,一般設定為絕對路徑。
(5)<Directory></Directory>指令
他們中間所包含的指令僅對當前目錄有效。
(6)Options指令
Options指令用來配置指定目錄的特性,比如是否允許該目錄下有符號連結,是否使用CGI等,這些特性包括:
All 除MultiViews之外的所有特性(預設設定)。
ExecCGI 允許該目錄通過mod_cgi執行CGI指令碼。
FollowSymLinks 允許在此目錄中使用符號連結。
Includes 在該目錄中允許使用mod_include進行伺服器端包含。
IncludesNOEXEC 允許伺服器端包含,但禁用”exec cmd“和#exec cgi“。
Indexes 允許列目錄,如果某個被訪問的目錄中沒有DirectoryIndex指定的檔案(如index.html),伺服器將生成並顯示目錄列表。
MultiViews 允許”內容協商“的”多重檢視“。
SymLinksIfOwnerMatch 只允許使用這樣的符號連結:這些符號連結與目標目錄(或檔案)的所有者具有相同的UserID。
(7)AllowOverride指令
該指令是針對.htaccess檔案的,可以允許該檔案的全部指令,也可以允許某些型別的指令,獲全部禁止,apache本來預設值是Alll,允許.htaccess全部指令,但出於安全考慮,ubuntu將其改為了AllowOverride None(直接忽略.htaccess檔案)。
(8)Order指令
該指令用來控制預設的訪問狀態,以及Allow和Deny指令的生效順序。
(9)Allow指令
該指令可以用來控制哪些主機可以訪問,可根據主機名、IP地址、IP範圍或其他環境變數的定義來進行控制。
(10)Deny指令
該指令用來限制主機的訪問,其語法和引數與Allow指令完全相同。
(11)ErrorLog指令
該指令定義了錯誤日誌的位置,ErrorLog /var/log/apache2/error_log
(12)LogLevel指令
該指令用來控制日誌的詳細程度的級別,每個級別所輸出的資訊都會包含上一級別的資訊。
(13)CustomLog指令
該指令定義了訪問日誌的路徑和格式。
(14)ServerSignature指令
該指令如果設定為Off,那麼伺服器生成的網頁底端不會有附加資訊,如果設定為On,那麼在某些情況下(比如目錄列表),伺服器生成的網頁底部會有類似這樣的資訊:Apache/2.2.8 (ubuntu) Server at blog.mytest.com Port 80
(15)Alias指令
它提供路徑別名,通過該指令,即使某個目錄或檔案不在DocumentRoot所設定的路徑下,也可以通過Alias指令使其可訪問,
比如Alias /doc/ "/usr/share/doc" ,它是將/usr/share/doc對映成網站的 /doc/