apache2.2 虛擬機器主機配置詳解,apache2.2詳解
一、修改httpd.conf
開啟appserv的安裝目錄,找到httpd.conf檔案,分別去掉下面兩行文字前面的#號。
#LoadModule vhost_alias_module modules/mod_vhost_alias.so
去掉#意思是啟用apache的虛擬機器主機功能。
#Include conf/extra/httpd-vhosts.conf
去掉這一行的#意思是從conf/extra/httpd-vhosts.conf這個檔案匯入虛擬機器主機配置
二、修改httpd-vhosts.conf
開啟該檔案,看到以下類似內容。虛擬機器主機的配置也是參照以下內容配置。下面對該內容進行講解
NameVirtualHost *:80 ServerAdmin webmaster@dummy-host.www.phpStudy.net DocumentRoot "C:/Program Files/Apache2/docs/dummy-host.www.phpStudy.net" ServerName dummy-host.www.phpStudy.net ServerAlias www.dummy-host.www.phpStudy.net ErrorLog "logs/dummy-host.www.phpStudy.net-error.log" CustomLog "logs/dummy-host.www.phpStudy.net-access.log" common
NameVirtualHost *:80
注意1:NameVirtualHost 指定虛擬機器主機所使用的IP地址或網域名稱,但是最好是IP地址。使用基於網域名稱的虛擬機器主機時,NameVirtualHost是必要的指令。NameVirtualHost可以定義多個。 注意2:所有符合NameVirtualHost或標籤定義的請求,都會被作為虛擬機器主機處理,而主伺服器將不理會。NameVirtualHost定義了而標籤沒有定義的的請求,伺服器會找不到相應的虛擬機器主機而將無法處理。所以每個NameVirtualHost定義的參數至少要有一個相匹配。 注意3:如果設定NameVirtualHost 或為*:80的話,所有針對80連接埠的請求,都會被虛擬機器主機處理,請求會根據網域名稱指向某個虛擬機器主機。如果有來自80連接埠的請求,而所請求的網域名稱沒有被配置為虛擬機器主機,那將指向第一個虛擬機器主機。這樣主伺服器將無法收到來自80連接埠的任何請求。為此也要為主伺服器配置一個虛擬機器主機。
ServerAdmin 管理員郵箱
DocumentRoot 網站目錄 (注意:如果網站目錄中的路徑有空格,請在路徑兩端加上雙引號)
ServerName 要綁定的網域名稱(必填)
ServerAlias 要綁定的虛擬機器主機的別名。(可選,如果多個網域名稱,中間以空格分隔,如果沒有,則去掉該行)
支援*,?兩種萬用字元,比如 *.abc.com,表示任意一個abc.com的次層網域都可訪問。
CustomLog 使用者記錄檔(可選,如果不需要,則去掉該行)
ErrorLog 錯誤記錄檔(可選,如果不需要,則去掉該行)
基於IP地址的虛擬機器主機
DocumentRoot /www/example1 ServerName www.example.com
DocumentRoot /www/example2 ServerName www.example.org
每個虛擬機器主機可定義多個IP,之間用空格隔開
各種虛擬機器主機的混用
Listen 80 Listen 81 NameVirtualHost 172.20.30.40 DocumentRoot /www/example1 ServerName www.example.com DocumentRoot /www/example2 ServerName www.example.org NameVirtualHost 172.20.30.40:81 DocumentRoot /www/example3 ServerName www.example3.net # IP-based DocumentRoot /www/example4 ServerName www.example4.edu DocumentRoot /www/example5 ServerName www.example5.gov
虛擬機器主機混用時的問題
一、虛擬機器主機混用可以這樣理解:一行NameVirtualHost指令定義的所有虛擬機器主機為一組;該組與一個基於IP的虛擬機器主機平級。即把一行NameVirtualHost定義的整個組看作是一個基於IP的虛擬機器主機。 二、虛擬機器主機指定的連接埠必須是Listen定義的。如果虛擬機器主機沒有指定連接埠,則認為是80連接埠。如果NameVirtualHost * 這樣定義,是指所有地址的所有已定義連接埠。 三、更具體的地址定義優先。比如NameVirtualHost指令定義了*:80,而某個基於IP的虛擬機器主機定義為192.168.0.1:80,那麼此時如有對192.168.0.1:80的請求,那請求會被優先指向192.168.0.1:80定義的虛擬機器主機。所以為了避免混亂,不要定義相互有交叉或包含的地址區間。 四、一個虛擬機器主機,可以同時為基於網域名稱和基於IP的。如上一例中最後一個虛擬機器主機。這樣符合兩種定義的請求都會被指同一個虛擬機器主機。有時要區別內外網對虛擬機器主機的訪問時可以這樣,因為來自內網的請求可能和來自外網的請求可能不一樣,但是它們需要指向同一個虛擬機器主機。
使用"_default_"虛擬機器主機
這個虛擬機器主機可以理解成基於IP的虛擬機器主機
DocumentRoot /www/default
這個虛擬機器主機將接管與其它虛擬機器主機IP和連接埠不匹配的請求。不過如此一來,主伺服器將不會處理任何請求。因此把主伺服器配置成一個虛擬機器主機是必要的。
本地機器代理在其它機器上啟動並執行虛擬機器主機
ProxyPreserveHost On ProxyPass /foo/no ! ProxyPass /foo http://192.168.111.2 ProxyPassReverse /foo http://192.168.111.2 ServerName hostname.example.com
一、首先這是一個基於IP的虛擬機器主機,它接收並處理對IP地址158.29.33.248的請求。 二、ProxyPass /foo http://192.168.111.2 將把對http://158.29.33.248/foo的請求轉換為一個代理請求,該請求指向http://192.168.111.2。 三、ProxyPass /foo/no ! 不代理針對/foo/no的請求。這個必須放在正常代理指令之前。 四、ProxyPreserveHost On 意思是傳送原始請求的Host資訊給被代理的機器。 五、ProxyPassReverse /foo http://192.168.111.2 可以保證請求URL在其它機器上被重新導向後,本機處理時也可以保持一致。具體看手冊關於反向 Proxy的部分。 六、基於網域名稱的虛擬機器主機也是同樣的道理。不管是什麼類型的虛擬機器主機,它只是處理歸它處理的請求而已。
配置執行個體
需求1:
這是一個基於IP的虛擬機器主機使用執行個體
一個項目資料應用,為了防止由於網域名稱解析問題導致不能正常訪問,因此採用IP的方式提供者。比如:http://61.122.3.6:8080/ 這樣的方式。虛擬機器主機的配置如下:
1、在httpd.conf中Listen 80下面增加一行,內容為:Listen 8080,即監聽8080連接埠
2、配置虛擬機器主機配置
#NameVirtualHost 61.122.3.6:8080 這一行可以不需要。經測試,基於IP地址的虛擬機器主機可不用設定NameVirtualHost項。 ServerAdmin webmaster@dummy-host.www.phpStudy.net DocumentRoot "d:/web/openj"
http://www.bkjia.com/PHPjc/1072328.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/1072328.htmlTechArticleapache2.2 虛擬機器主機配置詳解,apache2.2詳解 一、修改httpd.conf 開啟appserv的安裝目錄,找到httpd.conf檔案,分別去掉下面兩行文字前面的#號。 #...