Linux虛擬主機(jī)配置
時(shí)間:2023-07-17 12:36:01 | 來(lái)源:網(wǎng)站運(yùn)營(yíng)
時(shí)間:2023-07-17 12:36:01 來(lái)源:網(wǎng)站運(yùn)營(yíng)
Linux虛擬主機(jī)配置:
一、概述
虛擬主機(jī)(Virtual Host),又稱(chēng)虛擬服務(wù)器、主機(jī)空間或是網(wǎng)頁(yè)空間,是一種網(wǎng)絡(luò)技術(shù),可以讓多個(gè)主機(jī)名稱(chēng),在一個(gè)單一的服務(wù)器上運(yùn)作,而且可以分開(kāi)支持每個(gè)單一的主機(jī)名稱(chēng)。虛擬主機(jī)可以運(yùn)行多個(gè)網(wǎng)站或服務(wù)。虛擬并非指不存在,而是指空間是由實(shí)體的服務(wù)器延伸而來(lái),其硬件系統(tǒng)可以是基于服務(wù)器群,或者單個(gè)服務(wù)器。其技術(shù)是互聯(lián)網(wǎng)服務(wù)器采用的節(jié)省服務(wù)器硬件成本的技術(shù),虛擬主機(jī)技術(shù)主要應(yīng)用于HTTP、FTP、EMAIL等多項(xiàng)服務(wù),將一臺(tái)服務(wù)器的某項(xiàng)或者全部服務(wù)內(nèi)容邏輯劃分為多個(gè)服務(wù)段位,對(duì)外表現(xiàn)為多個(gè)服務(wù)器,從而充分利用服務(wù)器硬件資源。——Wiki中對(duì)虛擬主機(jī)的解釋。
虛擬主機(jī)的實(shí)現(xiàn)方式主要有三種:基于域名的方法(Name-based)、基于IP的方法(IP-based)以及基于端口的方法(Port-based)。下面將結(jié)合apache的配置來(lái)講解虛擬主機(jī)的各種配置及應(yīng)用場(chǎng)景。
注:實(shí)驗(yàn)環(huán)境為CentOS release 6.3(Final)
二、實(shí)戰(zhàn)演練
1. http配置文件講解
httpd的默認(rèn)配置文件為:/etc/httpd/conf/httpd.conf,它主要包含三大部分,如下:
[root@Slaver conf]# grep '/<Section/>' /etc/httpd/conf/httpd.conf -n33:### Section 1: Global Environment245:### Section 2: 'Main' server configuration977:### Section 3: Virtual Hosts[root@Slaver conf]#
其中:1)Global Environment——全局配置,決定Apache服務(wù)器的全局參數(shù)。
2)Main server configuration——主服務(wù)配置,相當(dāng)于是Apache的默認(rèn)web站點(diǎn),如果我們的服務(wù)器中只有一個(gè)站點(diǎn),那么就只需要在這里配置就可以了。
3)Virtual Hosts——虛擬主機(jī),虛擬主機(jī)不能與Main Server主服務(wù)器共存,當(dāng)啟用了虛擬主機(jī)之后,Main Server就不能使用了。
與虛擬主機(jī)相關(guān)的配置項(xiàng)有:a)Listen:80指定apache的監(jiān)聽(tīng)端口,在全局配置區(qū)中設(shè)置;b)NameVirtualHost:*:80在虛擬主機(jī)區(qū)域中設(shè)置。
2. 基于域名的多站點(diǎn)配置
適用場(chǎng)景:在一臺(tái)主機(jī)上配置兩個(gè)站點(diǎn),其域名分別為:
http://www.test01.com、
http://www.test02.com,對(duì)應(yīng)的站點(diǎn)文件存放位置為:/var/www/html/test01和/var/www/html/test02。
滿(mǎn)足此應(yīng)用的相關(guān)配置:
a. 修改/etc/httpd/conf/httpd.conf中的配置
i.端口監(jiān)聽(tīng)開(kāi)啟:Listen 80
ii.虛擬主機(jī)配置開(kāi)啟:NameVirtualHost *:80(將前面的注釋#去掉)
b. 在/etc/httpd/conf.d/中添加站點(diǎn)的配置文件
注意:在/etc/httpd/conf.d目錄下新建站點(diǎn)配置文件,必須確保Include conf.d/*.conf開(kāi)啟。新建配置文件內(nèi)容如下:
www.test01.conf
[root@Slaver conf.d]# cat www.test01.conf <VirtualHost *:80> DocumentRoot /var/www/html/test01 ServerName www.test01.com <Directory /var/www/html/test01> Options Indexes FollowSymLinks AllowOverride All Order Allow,Deny Allow from all </Directory></VirtualHost>[root@Slaver conf.d]#
www.test02.conf
[root@Slaver conf.d]# cat www.test02.conf <VirtualHost *:80> DocumentRoot /var/www/html/test02 ServerName www.test02.com <Directory /var/www/html/test02> Options Indexes FollowSymLinks AllowOverride All Order Allow,Deny Allow from all </Directory></VirtualHost>[root@Slaver conf.d]#
重啟httpd:service httpd restart,然后再瀏覽器中分別訪問(wèn)域名即可。注意:該域名訪問(wèn)的機(jī)器必須能夠解析到,如果不是公網(wǎng)的域名的話可以通過(guò)配置本機(jī)的hosts來(lái)解析。
c. 上述配置項(xiàng)分析
i.VirtualHost *:80
指定虛擬主機(jī)的IP以及端口,其中*:80表示響應(yīng)來(lái)自本機(jī)所有網(wǎng)卡的80端口的請(qǐng)求。當(dāng)然,這里也可以指定特定的IP,例如:VirtualHost 192.168.17.131:80,則它會(huì)響應(yīng)來(lái)自192.168.17.131IP的訪問(wèn)請(qǐng)求,與此同時(shí)在/etc/httpd/conf/httpd.conf中的NameVirtualHost也必須指定為192.168.17.131或*,不然的話在啟動(dòng)httpd的時(shí)候會(huì)報(bào)出如下的錯(cuò)誤:Starting httpd: [Wed Feb 04 22:30:23 2015] [warn] NameVirtualHost 192.168.17.131:80 has no VirtualHosts。
用簡(jiǎn)單的話來(lái)說(shuō),NameVirtualHost設(shè)定的與具體配置文件中VirtualHost設(shè)定的必須為一一對(duì)應(yīng),或者為*對(duì)一(NameVirtualHost為*,其他VirtualHost為具體的IP)。
ii.Options Indexes FollowSymLinks
Options中Indexes表示當(dāng)網(wǎng)頁(yè)不存在的時(shí)候允許索引顯示目錄中的文件;FollowSymLinks表示是否允許訪問(wèn)符號(hào)鏈接文件。
iii.AllowOverride All
AllowOverride表示是否允許該配置被覆蓋。例如:AllowOverride None表示不允許該Directory目錄下的訪問(wèn)控制文件(.htaccess)來(lái)改變這里的配置;AllowOverride All表示允許訪問(wèn)控制文件.htaccess來(lái)改變這里的配置。
iv.Order Allow,Deny
Order用來(lái)表示對(duì)頁(yè)面的訪問(wèn)控制順序,后面的一項(xiàng)是默認(rèn)選項(xiàng),如:Order Allow,Deny則默認(rèn)是Deny。Allow from all表示允許所有用戶(hù)。
3. 基于IP的多站點(diǎn)配置
適用場(chǎng)景:web服務(wù)器存在多塊網(wǎng)卡,有多個(gè)IP地址,這里假設(shè)有兩個(gè)IP地址,一個(gè)為:192.168.17.128,它對(duì)應(yīng)域名
http://www.test01.com;一個(gè)為:192.168.17.131,它對(duì)應(yīng)域名
http://www.test02.com。
a. 存在主服務(wù)器
1) 基本配置
還記得在/etc/httpd/conf/httpd.conf中提到的三大塊配置,其中就有主服務(wù)配置,假設(shè)192.168.17.128對(duì)應(yīng)主服務(wù)器,而另外一個(gè)IP192.168.17.131用于構(gòu)建兩個(gè)或多個(gè)虛擬主機(jī)。配置如下:
192.168.17.128上主服務(wù)器配置:
i.監(jiān)聽(tīng)80端口:Listen 80
ii.主服務(wù)器配置區(qū):ServerName
http://www.test01.comiii.主服務(wù)器配置區(qū):DocumentRoot /var/www/html/test01
192.168.17.131上多虛擬主機(jī)配置:
虛擬主機(jī)配置:VirtualHost 192.168.17.131:80
/etc/httpd/conf.d/中添加www.test02.conf、www.test03.conf的配置,配置內(nèi)容與“基于域名的多站點(diǎn)配置”等同。
在web瀏覽器中分別訪問(wèn):
http://www.test01.com、
http://www.test02.com和
http://www.test03.com會(huì)顯示各自的輸出。
注意:設(shè)置主服務(wù)器后,所有不是針對(duì)192.168.17.131的請(qǐng)求都將由主服務(wù)器來(lái)伺服;而提交給192.168.17.131卻沒(méi)有主機(jī)名或沒(méi)有Host:頭的請(qǐng)求,都將為
http://www.test02.com伺服(因?yàn)榕渲梦募?,它最靠前)?br>
2) 測(cè)試場(chǎng)景
需要測(cè)試兩種情況:
一、不是針對(duì)192.168.17.131的請(qǐng)求都將由主服務(wù)器來(lái)伺服
二、提交給192.168.17.131卻沒(méi)有主機(jī)名或沒(méi)有Host:頭的請(qǐng)求,都將為
http://www.test02.com伺服
現(xiàn)在為web服務(wù)器配置三個(gè)網(wǎng)絡(luò),如下圖所示:
并在本機(jī)的hosts文件中,添加如下IP與域名的對(duì)應(yīng)關(guān)系:
訪問(wèn)
http://www.test04.com,頁(yè)面輸出“Welcome to access web site test01 ... ”,驗(yàn)證了不是針對(duì)192.168.17.131的請(qǐng)求都將由主服務(wù)器來(lái)伺服。
訪問(wèn)
http://192.168.17.131,頁(yè)面輸出“Welcome to access web site test02 ... ”,驗(yàn)證了提交給192.168.17.131卻沒(méi)有主機(jī)名或沒(méi)有Host:頭的請(qǐng)求,都將為
http://www.test02.com伺服。
b. 不存在主服務(wù)器
適用場(chǎng)景:假設(shè)web服務(wù)器有兩個(gè)IP地址(192.168.17.128和172.20.30.40),該機(jī)器內(nèi)網(wǎng)和外網(wǎng)均可以訪問(wèn),在外部,域名:
http://www.test01.com指向外部地址172.20.30.40,而在內(nèi)部同樣的域名指向內(nèi)部地址192.168.17.128。
服務(wù)器可以配置為向來(lái)自?xún)?nèi)部和外部的請(qǐng)求提供同樣的內(nèi)容,只需要一個(gè)VirtualHost配置段就可以達(dá)到這個(gè)目的,服務(wù)器配置如下:
監(jiān)聽(tīng)80端口:Listen 80
配置虛擬主機(jī):NameVirtualHost 192.168.17.128:80
NameVirtualHost 172.20.30.40:80
/etc/httpd/conf.d/www.test01.conf配置內(nèi)容:
[root@Slaver conf.d]# cat www.test01.conf <VirtualHost 192.168.17.128:80 172.20.30.40:80> DocumentRoot /var/www/html/test01 ServerName www.test01.com <Directory /var/www/html/test01> Options Indexes FollowSymLinks AllowOverride All Order Allow,Deny Allow from all </Directory></VirtualHost>[root@Slaver conf.d]#
現(xiàn)在從不同網(wǎng)絡(luò)提交的請(qǐng)求都會(huì)由同一個(gè)VirtualHost來(lái)伺服。
4. 基于端口的多站點(diǎn)配置
適用場(chǎng)景:讓同一個(gè)IP的不同端口伺服多個(gè)域名。例如:通過(guò)
http://www.test01.com:80訪問(wèn)站點(diǎn)test01,通過(guò)
http://www.test01.com:8080訪問(wèn)站點(diǎn)test02。配置要點(diǎn):同一個(gè)IP端口不同;域名相同根目錄不同
具體配置如下:
i.配置http監(jiān)聽(tīng)80和8080端口:Listen:80
Listen:8080
ii.配置NameVirtualHost:NameVirtualHost 192.168.17.128:80
NameVirtualHost 192.168.17.128:8080
iii.配置/etc/httpd/conf.d/www.test01.conf,配置如下:
[root@Slaver conf.d]# cat www.test01.conf <VirtualHost 192.168.17.128:80> DocumentRoot /var/www/html/test01 ServerName www.test01.com <Directory /var/www/html/test01> Options Indexes FollowSymLinks AllowOverride All Order Allow,Deny Allow from all </Directory></VirtualHost><VirtualHost 192.168.17.128:8080> DocumentRoot /var/www/html/test02 ServerName www.test01.com <Directory /var/www/html/test02> Options Indexes FollowSymLinks AllowOverride All Order Allow,Deny Allow from all </Directory></VirtualHost>[root@Slaver conf.d]#
5. 只允許某個(gè)網(wǎng)段訪問(wèn)站點(diǎn)
適用場(chǎng)景:發(fā)布到外網(wǎng)的web站點(diǎn),后臺(tái)管理文件夾administrator不想讓外網(wǎng)的用戶(hù)可以訪問(wèn),只允許內(nèi)網(wǎng)192.168.17.0/24網(wǎng)段的客戶(hù)機(jī)訪問(wèn)。
配置如下:
[root@Slaver conf.d]# cat www.test01.conf <VirtualHost 192.168.17.128:80> DocumentRoot /var/www/html/test01 ServerName www.test01.com ErrorLog /var/log/httpd/www.test01.err CustomLog /var/log/httpd/www.test01.access common <Directory /var/www/html/test01/administrator> Options Indexes FollowSymLinks AllowOverride All Order Allow,Deny Allow from 192.168.17.0/24 </Directory></VirtualHost>[root@Slaver conf.d]#
當(dāng)不是通過(guò)這個(gè)網(wǎng)段進(jìn)來(lái)的訪問(wèn)請(qǐng)求,會(huì)出現(xiàn)如下的提示錯(cuò)誤:
6. 只允許通過(guò)認(rèn)證的用戶(hù)訪問(wèn)站點(diǎn)
適用場(chǎng)景:當(dāng)訪問(wèn)后臺(tái)時(shí),通過(guò)提供用戶(hù)名和密碼進(jìn)行認(rèn)證,只有通過(guò)認(rèn)證的用戶(hù)才能訪問(wèn)后臺(tái)。
配置文件如下:
[root@Slaver conf.d]# cat www.test01.conf <VirtualHost 192.168.17.128:80> DocumentRoot /var/www/html/test01 ServerName www.test01.com ErrorLog /var/log/httpd/www.test01.err CustomLog /var/log/httpd/www.test01.access common <Directory /var/www/html/test01/administrator> Options Indexes FollowSymLinks AllowOverride AuthConfig AuthName "Please input username and password!" AuthType Basic AuthUserFile /etc/httpd/.htpasswd Require user houqd2012 houqd2015 Order Allow,Deny Allow from all </Directory></VirtualHost>[root@Slaver conf.d]#
配置項(xiàng)代表的含義如下:
AllowOverride AuthConfig #采用認(rèn)證機(jī)制
AuthName “Please input username and password!” #認(rèn)證時(shí)顯示的提示語(yǔ)
AuthType Basic #用戶(hù)認(rèn)證類(lèi)型
AuthUserFile #認(rèn)證時(shí)用戶(hù)的賬號(hào)密碼文件
Require user houqd2012 houqd2015 #只有houqd2012和houqd2015用戶(hù)才能登陸
創(chuàng)建用戶(hù)名和密碼的命令如下:
htpasswd -cm /etc/httpd/.htpasswd houqd2012
htpasswd -c /etc/httpd/.htpasswd houqd2015
-c代表創(chuàng)建一個(gè)新文件,-m代表密碼使用MD5加密,執(zhí)行完后會(huì)生成/etc/httpd/.htpasswd文件。
效果圖如下:
三、總結(jié)
在開(kāi)發(fā)中好幾次遇到虛擬主機(jī)的配置問(wèn)題,每次都是臨時(shí)查一查解決沒(méi)有系統(tǒng)的了解,等下次碰到問(wèn)題時(shí)還是解決不了,浪費(fèi)了很多時(shí)間,這次索性集中整理一次,望更多的朋友也了解如何利用虛擬主機(jī)更好的我們的生產(chǎn)環(huán)境服務(wù)。
四、參考鏈接
a. VirtualHost Examples:
http://httpd.apache.org/docs/2.4/vhosts/examples.html b. Web服務(wù)器基礎(chǔ)之二Apache主配置文件httpd.conf:
http://pvbutler.blog.51cto.com/7662323/1352360 c. 維基百科虛擬主機(jī)的解釋?zhuān)?span >http://
zh.wikipedia.org/zh-cn/%E8%99%9A%E6%8B%9F%E4%B8%BB%E6%9C%BAd. Web服務(wù)器(Apache)虛擬主機(jī)的配置:
http://chenxizhuimeng.blog.51cto.com/2516314/504823e. 教你如何實(shí)現(xiàn)Apahce的用戶(hù)認(rèn)證:
http://www.linuxidc.com/Linux/2013-04/82422.htm f. Linux中apache虛擬主機(jī)(vhost)多種配置形式:
http://www.111cn.net/sys/linux/42471.htm原文鏈接:Linux虛擬主機(jī)配置終極篇_天道酬勤-CSDN博客_linux虛擬主機(jī)配置