1. 程式人生 > >Ubuntu Linux下配置虛擬主機及其配置檔案詳細說明

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/