程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> apache2.2 虛擬主機配置詳解,apache2.2詳解

apache2.2 虛擬主機配置詳解,apache2.2詳解

編輯:關於PHP編程

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  
  
<VirtualHost *:80>  
    ServerAdmin [email protected]  
    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  
</VirtualHost>  

 NameVirtualHost *:80

 注意1:NameVirtualHost 指定虛擬主機所使用的IP地址或域名,但是最好是IP地址。使用基於域名的虛擬主機時,NameVirtualHost是必要的指令。NameVirtualHost可以定義多個。  注意2:所有符合NameVirtualHost或<VirtualHost>標簽定義的請求,都會被作為虛擬主機處理,而主服務器將不理會。NameVirtualHost定義了而<VirtualHost>標簽沒有定義的的請求,服務器會找不到相應的虛擬主機而將無法處理。所以每個NameVirtualHost定義的參數至少要有一個<VirtualHost>相匹配。 注意3:如果設置NameVirtualHost 或<VirtualHost>為*:80的話,所有針對80端口的請求,都會被虛擬主機處理,請求會根據域名指向某個虛擬主機。如果有來自80端口的請求,而所請求的域名沒有被配置為虛擬主機,那將指向第一個虛擬主機。這樣主服務器將無法收到來自80端口的任何請求。為此也要為主服務器配置一個虛擬主機。

ServerAdmin 管理員郵箱

DocumentRoot 網站目錄 (注意:如果網站目錄中的路徑有空格,請在路徑兩端加上雙引號)

ServerName 要綁定的域名(必填)

ServerAlias 要綁定的虛擬主機的別名。(可選,如果多個域名,中間以空格分隔,如果沒有,則去掉該行)

支持*,?兩種通配符,比如 *.abc.com,表示任意一個abc.com的二級域名都可訪問。

CustomLog 用戶日志文件(可選,如果不需要,則去掉該行)

ErrorLog 錯誤日志(可選,如果不需要,則去掉該行)

基於IP地址的虛擬主機

<VirtualHost 172.20.30.40>  
  DocumentRoot /www/example1  
  ServerName www.example.com  
</VirtualHost>  

 

<VirtualHost 172.20.30.50 192.168.0.10:80>  
  DocumentRoot /www/example2  
  ServerName www.example.org  
</VirtualHost>  

 每個虛擬主機可定義多個IP,之間用空格隔開

各種虛擬主機的混用

Listen 80  
Listen 81  
  
NameVirtualHost 172.20.30.40  
  
<VirtualHost 172.20.30.40>  
    DocumentRoot /www/example1  
    ServerName www.example.com  
</VirtualHost>  
  
<VirtualHost 172.20.30.40>  
    DocumentRoot /www/example2  
    ServerName www.example.org  
</VirtualHost>  
  
NameVirtualHost 172.20.30.40:81  
  
<VirtualHost 172.20.30.40:81>  
    DocumentRoot /www/example3  
    ServerName www.example3.net  
</VirtualHost>  
  
# IP-based  
<VirtualHost 172.20.30.50>  
    DocumentRoot /www/example4  
    ServerName www.example4.edu  
</VirtualHost>  
  
<VirtualHost 172.20.30.60:81 172.20.30.40:81>  
    DocumentRoot /www/example5  
    ServerName www.example5.gov  
</VirtualHost>  

 

虛擬主機混用時的問題

 

一、虛擬主機混用可以這樣理解:一行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的虛擬主機

 

<VirtualHost _default_:*>  
    DocumentRoot /www/default  
</VirtualHost>  

 

這個虛擬主機將接管與其它虛擬主機IP和端口不匹配的請求。不過如此一來,主服務器將不會處理任何請求。因此把主服務器配置成一個虛擬主機是必要的。

 

本地機器代理在其它機器上運行的虛擬主機

 

<VirtualHost 158.29.33.248>  
    ProxyPreserveHost On  
    ProxyPass /foo/no !  
    ProxyPass /foo http://192.168.111.2  
    ProxyPassReverse /foo http://192.168.111.2  
    ServerName hostname.example.com  
</VirtualHost>

 

一、首先這是一個基於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在其它機器上被重定向後,本機處理時也可以保持一致。具體看手冊關於反向代理的部分。 六、基於域名的虛擬主機也是同樣的道理。不管是什麼類型的虛擬主機,它只是處理歸它處理的請求而已。

 

配置實例

需求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項。  
<VirtualHost 61.122.3.6:8080>  
    ServerAdmin [email protected]  
    DocumentRoot "d:/web/openj"  
</VirtualHost>  

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved