apache虛擬主機的配置指南
一、檢查apache虛擬主機模塊
apache要配置虛擬主機,就需要先查看apache是否編譯vhost_alias_module模塊。當然apache默認是已經(jīng)編譯該模塊的,我們可以通過以下命令查看是否已經(jīng)編譯模塊,如下:
/usr/local/apache2/bin/apachectl -M
二、開啟apache虛擬主機功能
要開啟apache虛擬主機功能,我們需要修改apache配置文件http.conf。打開apache的安裝目錄,找到httpd.conf文件,去掉Include conf/extra/httpd-vhosts.conf前的#。如下:
vi httpd.conf
該行的作用是,把conf/extra/目錄下的httpd-vhosts.conf文件導入虛擬主機配置中。
下面我們所有有關虛擬主機的配置都在httpd-vhosts.conf文件中進行。如下:
apache虛擬主機配置主要分為三種,分別是根據(jù)IP地址、根據(jù)端口、根據(jù)域名。
這三種虛擬主機,我們主要講解基于域名的虛擬主機。基于IP與基于端口在生產(chǎn)環(huán)境中使用的比較少,我們在此只大致講解其配置。
注意在此之前,我們還要修改httpd.conf文件把有關目錄訪問權限的配置選項去掉。否則在訪問虛擬主機時,會報403錯誤。如下:
httpd.conf文件去掉Order deny,allow和Deny from all行,修改如下:
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
值得注意的是,當我們?yōu)閍pache啟用虛擬主機之后,那么所有的用戶請求都會交由對應的虛擬主機來處理。如果apache找不到對應的虛擬主機,則會把該請求交給配置文件中排在最前面的虛擬主機來處理。
同時如果配置基于域名的虛擬主機,我們必須要啟用NameVirtualHost *:80行。如下:
三、httpd-vhosts.conf文件詳解
httpd-vhosts.conf文件內(nèi)容大致如下:
NameVirtualHost *:80
<VirtualHost *:80>
ServerAdmin webmaster@dummy-host.example.com
DocumentRoot "@@ServerRoot@@/docs/dummy-host.example.com"
ServerName dummy-host.example.com
ServerAlias www.dummy-host.example.com
ErrorLog "logs/dummy-host.example.com-error_log"
CustomLog "logs/dummy-host.example.com-access_log" common
</VirtualHost>
NameVirtualHost指定虛擬主機所使用的IP地址或域名,但是最好是IP地址。使用基于域名的虛擬主機時,NameVirtualHost是必要的指令。NameVirtualHost可以定義多個。所有符合NameVirtualHost或<VirtualHost>標簽定義的請求,都會被作為虛擬主機處理,而主服務器將不理會。NameVirtualHost定義了而<VirtualHost>標簽沒有定義的的請求,服務器會找不到相應的虛擬主機而將無法處理。所以每個NameVirtualHost定義的參數(shù)至少要有一個<VirtualHost>相匹配。
如果設置NameVirtualHost或<VirtualHost>為*:80的話,所有針對80端口的請求,都會被虛擬主機處理,請求會根據(jù)域名指向某個虛擬主機。如果有來自80端口的請求,而所請求的域名沒有被配置為虛擬主機,那將指向第一個虛擬主機。這樣主服務器將無法收到來自80端口的任何請求。為此也要為主服務器配置一個虛擬主機。
想要配置基于域名的虛擬主機,則必須使用NameVirtualHost指令,該指令用于指定對于當前服務器的哪些IP地址和端口可以接受虛擬主機的相關訪問請求,而且這些IP地址和端口必須包含在服務器監(jiān)聽的地址和端口之中。
如果你希望用到服務器上所有的IP地址,你可以使用指令:NameVirtualHost *。
如果apache監(jiān)聽了多個端口(例如:常規(guī)的80端口和SSL的443端口),那么必須在NameVirtualHost指令中指定一個端口,例如:NameVirtualHost *:80。
我們可以使用VirtualHost配置段來添加一個虛擬主機,如果有多個虛擬主機,我們可以添加多個這樣的配置段。
在VirtualHost配置段中,我們可以使用配置指令來對該虛擬主機進行設置,除了諸如創(chuàng)建進程等少數(shù)特殊的指令外,幾乎所有的指令都可以出現(xiàn)在VirtualHost配置段中。如果沒有設置某些指令,則該虛擬主機將采用主服務器范圍內(nèi)相同的全局指令作為默認設置。當然,VirtualHost配置段至少應該包含ServerName和DocumentRoot這兩個配置指令,用以指定虛擬主機的域名和站點文檔目錄的路徑。如下:
<VirtualHost *:80>
DocumentRoot "/www/a.ilanni.com"
ServerName a.ilanni.com
</VirtualHost>
ServerAdmin管理員郵箱。
DocumentRoot網(wǎng)站目錄(注意:如果網(wǎng)站目錄中的路徑有空格,請在路徑兩端加上雙引號)。
ServerName要綁定的域名(必填)。
ServerAlias要綁定的虛擬主機的別名。(可選,如果多個域名,中間以空格分隔,如果沒有,則去掉該行)。支持*,?兩種通配符,比如*.abc.com,表示任意一個abc.com的二級域名都可訪問。
CustomLog用戶日志文件(可選,如果不需要,則去掉該行)。
ErrorLog 錯誤日志(可選,如果不需要,則去掉該行)。
四、根據(jù)IP配置虛擬主機
apache基于IP虛擬主機在實際的生產(chǎn)環(huán)境中使用比較少,主要是使用在單網(wǎng)卡多IP的情況下。
我們要測試此功能,需要給服務器的網(wǎng)卡增加一個IP。首先查看服務器的IP地址,如下:
ifconfig eth0|grep "inet addr"|awk '{print $2}'|cut -d: -f2
ifconfig eth2|grep "inet addr"|awk '{print $2}'|sed 's/addr://g'
可以看到目前服務器的IP是192.168.1.213,再增加一個IP地址為192.168.1.215。eth0網(wǎng)卡增加IP地址,可以通過網(wǎng)卡配置文件實現(xiàn)。如下:
cp /etc/sysconfig/network-scripts/ifcfg-eth0 /etc/sysconfig/network-scripts/ifcfg-eth0:0
cat /etc/sysconfig/network-scripts/ifcfg-eth0:0
/etc/init.d/network restart
ping 192.168.1.215
IP地址增加完畢后,我們現(xiàn)在來修改虛擬主機的配置文件httpd-vhosts.conf。如下:
cat httpd-vhosts.conf|grep -v ^$|grep -v ^#
httpd-vhosts.conf修改完畢后,我們需要檢查該虛擬主機配置是否正確,使用-S命令。如下:
/etc/init.d/httpd –S
通過上圖可以看到該虛擬主機的配置是正確。
為虛擬主機192.168.1.215創(chuàng)建主頁文件,如下:
mkdir /www/192.168.1.215
echo "this is web-server 192.168.1.215">/www/192.168.1.215/index.html
cat /www/192.168.1.215/index.html
訪問192.168.1.215虛擬主機。如下:
或者通過elinks進行測試,如下:
elinks -dump http://192.168.1.215
可以看到虛擬主機192.168.1.215,已經(jīng)可以正常訪問了。
現(xiàn)在訪問192.168.1.213,看看實際效果。如下:
五、根據(jù)端口配置虛擬主機
apache默認是監(jiān)聽80端口,這個可以通過apache配置文件httpd.conf進行查看。如下:
cat /usr/local/apache2/conf/httpd.conf|grep 80
apache基于端口虛擬主機在實際生產(chǎn)環(huán)境中也不多見,一般是為公司內(nèi)部人員提供訪問的,如頁面的后臺、CMS發(fā)布、phpmyadmin等。
現(xiàn)在我們開始配置基于端口的虛擬主機,在此之前我們需要修改兩個文件一是apache的配置文件httpd.conf,二是apache虛擬主機配置文件httpd-vhosts.conf。
現(xiàn)在我們使用8088這個端口來設置虛擬主機。修改httpd.conf。如下:
vim /usr/local/apache2/conf/httpd.conf
此文件修改完畢后,我們再來修改httpd-vhosts.conf。如下:
cat httpd-vhosts.conf|grep -v ^$|grep -v ^#
為虛擬主機192.168.1.215:8088創(chuàng)建主頁文件,如下:
mkdir 192.168.1.215:8088
echo "his is web-server 192.168.1.215:8088">index.php
cat index.php
現(xiàn)在訪問虛擬主機192.168.1.215:8088,如下:
或者使用elinks,如下:
elinks -dump http://192.168.1.215:8088
六、根據(jù)域名配置虛擬主機
apache基于域名的虛擬主機是我們經(jīng)常使用的,也是在生產(chǎn)環(huán)境中最常見的。
配置基于域名的虛擬主機,我們還是要編輯httpd-vhosts.conf文件。如下:
vim httpd-vhosts.conf
:45,48s/192.168.1.215:8088/a.ilanni.com/g
以上修改完畢后,我們來創(chuàng)建虛擬主機a.ilanni.com默認主頁。如下:
mkdir /www/a.ilanni.com
echo "<?php phpinfo();?>">/www/a.ilanni.com/index.php
cat /www/a.ilanni.com/index.php
以上配置完畢后,重新加載apache的配置文件,即優(yōu)雅重啟apache。如下:
/etc/init.d/httpd graceful
訪問虛擬主機a.ilanni.com,如下:
或者使用elinks,如下:
elinks -dump http://a.ilanni.com
通過上圖,可以看到目前虛擬主機a.ilanni.com,已經(jīng)可以正常訪問了。
七、混合配置虛擬主機
以上我們介紹了apache基于IP、基于端口和基于域名的虛擬主機配置。下面我們給出apache混合虛擬主機配置,配置文件如下:
<VirtualHost b.ilanni.com:8088>
ServerAdmin webmaster@dummy-host.example.com
DocumentRoot "/www/b.ilanni.com:8088"
ServerName b.ilanni.com:8088
ErrorLog "logs/b.ilanni.com:8088-error_log"
CustomLog "logs/b.ilanni.com:8088-access_log" common
</VirtualHost>
1、虛擬主機混用可以這樣理解:一行NameVirtualHost指令定義的所有虛擬主機為一組;該組與一個基于IP的虛擬主機平級。即把一行NameVirtualHost定義的整個組看作是一個基于IP的虛擬主機。
2、虛擬主機指定的端口必須是Listen定義的。如果虛擬主機沒有指定端口,則認為是80端口。如果NameVirtualHost * 這樣定義,是指所有地址的所有已定義端口。
3、更具體的地址定義優(yōu)先。比如NameVirtualHost指令定義了*:80,而某個基于IP的虛擬主機定義為192.168.0.1:80,那么此時如有對192.168.0.1:80的請求,那請求會被優(yōu)先指向192.168.0.1:80定義的虛擬主機。所以為了避免混亂,不要定義相互有交叉或包含的地址區(qū)間。
4、一個虛擬主機,可以同時為基于域名和基于IP的。如上一例中最后一個虛擬主機。這樣符合兩種定義的請求都會被指同一個虛擬主機。有時要區(qū)別內(nèi)外網(wǎng)對虛擬主機的訪問時可以這樣,因為來自內(nèi)網(wǎng)的請求可能和來自外網(wǎng)的請求可能不一樣,但是它們需要指向同一個虛擬主機。
使用"_default_"虛擬主機,這個虛擬主機可以理解成基于IP的虛擬主機。如下:
<VirtualHost _default_:*>
DocumentRoot /www/default
</VirtualHost>
這個虛擬主機將接管與其它虛擬主機IP和端口不匹配的請求。不過如此一來,主服務器將不會處理任何請求。因此把主服務器配置成一個虛擬主機是必要的。
相關文章
CentOS 7.x安裝部署Memcached服務器的詳細方法
這篇文章主要介紹了CentOS 7.x安裝部署Memcached服務器的詳細步驟,需要的朋友可以參考下2018-01-01