一.定義
所謂虛拟主機是指在一台伺服器裡運作幾個網站(如:<code>www.company1.com</code>和<code>www.company2.com</code>),提供WEB、FTP、Mail等服務。
二.虛拟主機的實作方法有三種:
基于IP的方法,基于主機名的方法 和 基于端口的方法。
①基于IP的方法:
在伺服器裡綁定多個IP,然後配置WEB伺服器,把多個網站綁定在不同的IP上。通路不同的IP,就看到不同的網站。
②基于端口的方法:
一個IP位址,通過不同的端口實在不同網站的通路。
③基于主機名的方法:
設定多個域名的A記錄,使它們解析到同一個IP位址上,即同一個伺服器上。然後,在伺服器上配置WEB服務端,添加多個網站,為每個網站設定一個主機名。因為HTTP協定通路請求裡包含有主機名資訊,當WEB伺服器收到通路請求時,就可以根據不同的主機名來通路不同的網站。
三.三種虛拟主機實作的基本配置
①基于IP虛拟主機的實作:
多個ip,需要把中心主機取消
打開web服務的主配置文檔:vim /etc/httpd/conf/httpd.conf
DocumentRoot 注釋掉
配置虛拟主機:
<VirtualHost 192.168.0.20:80>
DocumentRoot "/www/a.com"
<VirtualHost/>
<VirtualHost 192.168.0.25:80>
DocumentRoot "/www/b.com"
vi /etc/hosts
浏覽器中輸入IP位址進行實驗效果的驗證。
②基于端口:
<VirtualHost 192.168.0.20:8080>
③基于主機名:
開啟:NameVirtualHost 192.168.0.20:80
<VirtualHost *:80>
DocumentRoot /etc/httpd/aaa/a.com
ServerName dummy-host.example.com
ErrorLog logs/dummy-host.example.com-error_log
CustomLog logs/dummy-host.example.com-access_log common
</VirtualHost>
DocumentRoot /etc/httpd/aaa/b.com
基于域名(主機名)的虛拟主機相對比較簡單,因為你隻需要配置你的DNS伺服器将每個主機名映射到正确的IP位址,然後配置Apache HTTP伺服器,令其辨識不同的主機名就可以了。基于域名的伺服器也可以緩解IP位址不足的問題。是以,如果沒有特殊原因使你必須使用基于IP的虛拟主機,您最好還是使用基于域名的虛拟主機。下列情況下,你可能會想要使用基于IP的虛拟主機:
一些古董級的用戶端與基于域名的虛拟主機不相容。為了與基于域名的虛拟主機相容,用戶端必須發送"Host"頭。HTTP/1.1規範中對此做了要求。而所有現在常見的僅支援HTTP/1.0的舊版本浏覽器都以附加的方式實作了這個要求。如果你又想支援這些老浏覽器,又想使用基于域名的虛拟主機。我們提供了一個技術方案,你可以在本文末尾看到它。
SSL協定先天特性決定了基于域名的虛拟主機無法成為SSL安全伺服器。
一些作業系統和網絡裝置實作的帶寬管理技術無法在多個主機共享一個IP的情況下差別它們。
四.基于域名虛拟主機案例綜合實作
相關子產品
相關指令
比如說,假設你正在為域名<code>www.domain.tld</code>提供服務,而你又想在同一個IP位址上增加一個名叫<code>www.otherdomain.tld</code>的虛拟主機,你隻需在<code>httpd.conf</code>中加入以下内容:
<code>NameVirtualHost *:80 ————現在版本,這個參數已經廢棄。 <VirtualHost *:80> ServerName www.domain.tld ServerAlias domain.tld *.domain.tld DocumentRoot /www/domain </VirtualHost> <VirtualHost *:80> ServerName www.otherdomain.tld DocumentRoot /www/otherdomain </VirtualHost></code>
<code>ServerAlias domain.tld *.domain.tld</code>
下面練習題:
建立http伺服器,要求:
1)提供兩個基于名稱的虛拟主機:
(a)www1.ilinux.org,頁面檔案目錄為/var/www/html/www1;錯誤日志 為/var/log/httpd/www1.err,通路日志為/var/log/httpd/www1.access;
(b)www2.ilinux.org,頁面檔案目錄為/var/www/html/www2;錯誤日志為/var/log/httpd/www2.err,通路日志為/var/log/httpd/www2.access;
(c)為兩個虛拟主機建立各自的首頁檔案index.html,内容分别為其對應的主機名;
2)www1主機僅允許192.168.0.0/24網絡中的客戶機通路;www2主機可以被所有主機通路;
為http服務提供第3個虛拟主機,要求:
1)www3.ilinux.org,頁面檔案目錄為/var/www/html/www3;錯誤日志為/var/log/httpd/www3.err,通路日志為/var/log/httpd/www3.access;
2)為此虛拟主機提供基本認證功能,并為其提供兩個虛拟使用者webuser1和webuser2,
密碼均為redhat,要求允許此兩使用者在提供密碼的情況下通路此站點;
配置過程如下:
①安裝web服務:yum -y install httpd
②進入主配置文檔vim /etc/httpd/conf/httpd.conf
DocumentRoot "/var/www/html/www1" ——DocumentRoot定義這個伺服器對外釋出的超文本文檔存放的路徑,
——客戶程式請求的UR L就被映射為這個目錄下的網頁檔案。
ServerName www1.ilinux.org ——這個就是客戶在浏覽器裡輸入的網址
Errorlog /var/log/httpd/www1.err ——錯誤日志位置
CustomLog /var/log/httpd/www1.access common
<Directory "/var/www/html/www1">
Options Indexes ——參考文檔:http://blog.csdn.net/cymm_liu/article/details/7899049
AllowOverride None
Order allow,deny
Allow from 192.168.0.0/24 ——www1主機僅允許192.168.0.0/24網絡中的客戶機通路
</Directory>
DocumentRoot "/var/www/html/www2"
ServerName www2.ilinux.org
Errorlog /var/log/httpd/www2.err
CustomLog /var/log/httpd/www2.access common
<Directory "/var/www/html/www2">
Options Indexes
AllowOverride None
Order allow,deny
Allow from all ——這個就是允許所有的ip來通路,如果設定成Deny from all,網頁就是顯403禁止通路。
</Directory>
DocumentRoot /var/www/html/www3
ServerName www3.ilinux.org
ErrorLog /var/log/httpd/www3.err
CustomLog /var/log/httpd/www3.access combined
<Directory "/var/www/html/www3">
AllowOverride AuthConfig
AuthName "AuthConfig.."
AuthType basic
AuthUserFile /etc/httpd/.htpasswd
require user webuser1 webuser2
Order allow,deny
Allow from all
</Directory>
</VirtualHost>
htpasswd -cm /etc/httpd/.htpasswd webuser1
htpasswd -m /etc/httpd/.htpasswd webuser2
③分别在/var/www/html目錄下建立www1,www2,www3目錄
vim /var/www/html/www1/index.html
This is www1 test!
vim /var/www/html/www2/index.html
This is www2 test!
vim /var/www/html/www3/index.html
This is www3 test!
④service httpd start 啟動web服務
⑤進行實驗效果的驗證:浏覽器中分别輸入www1.ilinux.org www2.ilinux.org www3.ilinux.org