<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    allen
    專注于java ee技術,包括struts,jsf,webwork,spring,hibernate,ibatis
    posts - 7,  comments - 9,  trackbacks - 0

    作者:linlonx@靈龍-技術 實驗室 地址:http://www.linlonx.com/post/288/

      您的服務器有只一個IP地址,而在DNS中有很多域名(CNAMES)映射到這個機器。您而您想要在這個機器上運行www.example.comwww.example.org兩個站點。

      注意
      在您的Apache服務器配置中創建一個虛擬主機并不會自動在您的DNS中對主機名做相應更新。您必須自己在DNS中添加域名來指向您的IP地址。否則別人是無法看到您的web站點的。您可以在您的hosts文件中添加這一條目來進行測試,但這種方法僅適用于那些有這些hosts文件的機器來使用。 

      服務器配置
      # 確保Apache在監聽80端口
      Listen 80

      # 為虛擬主機在所有IP地址上監聽
      NameVirtualHost *:80

      <VirtualHost *:80>
      DocumentRoot /www/example1
      ServerName www.example.com

      # 你可以在這里添加其他指令

      </VirtualHost>

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

      # 你可以在這里添加其他指令

      </VirtualHost>

      因為星號匹配所有IP地址,所以主服務器不接收任何請求。因為www.example.com首先出現在配置文件中,所以它擁有最高優先級,可以認為是默認或主服務器。這意味著如果一個請求不能與某個ServerName指令相匹配,它將會由第一個<VirtualHost>段所伺服。

      注意
      如果您愿意,您可以用確定的IP地址來取代"*"。在這種情況下,VirtualHost的參數必須與NameVirtualHost的參數相符:

      NameVirtualHost 172.20.30.40

      <VirtualHost 172.20.30.40>
      # 其他 ...

      然而,當您的IP地址無法確定的時候,使用"*"是很方便的,比如說,您的ISP給您配置的是動態IP地址,而您又使用了某種動態域名解析系統時。因為"*"匹配任何IP地址,所以在這種情況下,不論IP地址如何變化,您都不需要另外進行配置。

      上述配置就是您在絕大多數情況下使用基于域名的虛擬主機時將要用到的。事實上,僅在一種情況下這樣的配置不會讓您滿意:您想為不同的IP地址或是端口提供不同的內容。

      在多于一個IP的情況下使用基于域名的虛擬主機。
      注意
      在這里討論的任何技術都可以推廣到使用任意數量的IP地址。

      服務器有兩個IP地址。一個(172.20.30.40)用于主服務器server.domain.com ,另外一個(172.20.30.50)用于構建兩個或多個虛擬主機。

      服務器配置
      Listen 80

      # "主"服務器運行于:172.20.30.40
      ServerName server.domain.com
      DocumentRoot /www/mainserver

      # 這是另外一個IP地址
      NameVirtualHost 172.20.30.50

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

      # 你可以在這里添加其他指令 ...

      </VirtualHost>

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

      # 你可以在這里添加其他指令 ...

      </VirtualHost>

      任何不是針對172.20.30.50的請求都將由主服務器來伺服。而提交給172.20.30.50卻沒有主機名或沒有"Host:"頭的請求,都將由ww.example.com伺服。

      在不同的IP的地址(比如一個內部和一個外部地址)上提供相同的內容
      服務器有兩個IP地址(192.168.1.1和172.20.30.40)。這個機器位于內部(局域網)網絡和外部(廣域網)之間。在外部,域名server.example.com指向外部地址(172.20.30.40),而在內部則指向內部地址(192.168.1.1)。

      服務器可以為來自內部和外部的請求提供同樣的內容,您只需要一個<VirtualHost>配置段就可以了。

      服務器配置
      NameVirtualHost 192.168.1.1
      NameVirtualHost 172.20.30.40

      <VirtualHost 192.168.1.1 172.20.30.40>
      DocumentRoot /www/server1
      ServerName server.example.com
      ServerAlias server
      </VirtualHost>

      現在,從不同的網絡提交的請求都會由同一個<VirtualHost>段來伺服。

      注意
      在內網中,您可以使用server這個名字來代替server.example.com這個全名。

      跟上面一樣,在上述的例子里,您可以用"*"來代替具體的IP地址,這樣就可以對所有的地址都返回相同的內容了。

      在不同的端口上運行不同的站點
      如果您想讓同一個IP的不同端口伺服多個域名。您可以借助在NameVirtualHost指令中定義端口的方法來達到這個目的。如果您想使用不帶"name:port"的<VirtualHost name:port>或是直接用Listen指令,您的配置將無法生效。

      服務器配置
      Listen 80
      Listen 8080

      NameVirtualHost 172.20.30.40:80
      NameVirtualHost 172.20.30.40:8080

      <VirtualHost 172.20.30.40:80>
      ServerName www.example.com
      DocumentRoot /www/domain-80
      </VirtualHost>

      <VirtualHost 172.20.30.40:8080>
      ServerName www.example.com
      DocumentRoot /www/domain-8080
      </VirtualHost>

      <VirtualHost 172.20.30.40:80>
      ServerName www.example.org
      DocumentRoot /www/otherdomain-80
      </VirtualHost>

      <VirtualHost 172.20.30.40:8080>
      ServerName www.example.org
      DocumentRoot /www/otherdomain-8080
      </VirtualHost>

      建立基于IP的虛擬主機
      一個有兩個IP地址(172.20.30.40和172.20.30.50)分別對應域名www.example.comwww.example.org的配置如下:

      服務器配置
      Listen 80

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

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

      如果存在主服務器,那么對沒有出現在任一個<VirtualHost>段中的請求(比如,對localhost的請求)都會由主服務器來伺服。

      混用基于端口和基于IP的虛擬主機
      如果您的服務器有兩個IP地址(172.20.30.40和172.20.30.50)分別對應域名www.example.comwww.example.org 。對每個域名,您都希望在80端口和8080端口發布您的網站。您可以這樣配置:

      服務器配置
      Listen 172.20.30.40:80
      Listen 172.20.30.40:8080
      Listen 172.20.30.50:80
      Listen 172.20.30.50:8080

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

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

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

      <VirtualHost 172.20.30.50:8080>
      DocumentRoot /www/example2-8080
      ServerName www.example.org
      </VirtualHost>

      混用基于域名和基于IP的虛擬主機
      您想在一些地址上配置基于域名的虛擬主機而在另外一些地址上配置基于IP的虛擬主機。

      服務器配置
      Listen 80

      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>

      <VirtualHost 172.20.30.40>
      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>
      DocumentRoot /www/example5
      ServerName www.example5.gov
      </VirtualHost>

      將<Virtual_host>和mod_proxy模塊一起使用
      下面的例子允許一個前端機器代理一個運行在其他機器上的虛擬主機。在如下示例中,在192.168.111.2機器上配置了一個同名的虛擬主機。這樣,萬一在同一臺機器上代理了多個主機名,ProxyPreserveHostOn 指令能確保指定的主機名順利通過代理。

      <VirtualHost *:*>
      ProxyPreserveHost On
      ProxyPass / http://192.168.111.2
      ProxyPassReverse / http://192.168.111.2/
      ServerName hostname.example.com
      </VirtualHost>

      使用"_default_"虛擬主機
      為所有端口配置"_default_"虛擬主機
      這樣配置可以捕獲所有指向沒指定的IP地址和端口的請求。比如:一個沒被任何虛擬主機使用的地址/端口對。

      服務器配置
      <VirtualHost _default_:*>
      DocumentRoot /www/default
      </VirtualHost>

      這樣一個使用通配符端口的默認虛擬主機可以有效的防止請求被主服務器接收。

      如果一個地址/端口對已經被一個基于域名的虛擬主機使用,那么"_default_"虛擬主機決不會處理發向這個地址/端口對的請求。如果一個"Host:"請求頭中包含未知信息,或者干脆就沒有,那么它會被第一個基于域名的虛擬主機(也就是在配置文件中最先出現的使用了那個地址/端口對的虛擬主機)處理。

      您可以用AliasMatch或RewriteRule來重寫任何請求,使它指向一個簡單信息頁面(或腳本)。

      為不同的端口配置"_default_"虛擬主機
      與第一種一樣,但我們想讓服務器偵聽很多端口而第二個"_default_"虛擬主機單獨偵聽80端口。

      服務器配置
      <VirtualHost _default_:80>
      DocumentRoot /www/default80
      # ...
      </VirtualHost>

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

      偵聽80端口的"_default_"虛擬主機(必須出現在所有使用通配符端口的虛擬主機之前)會捕獲所有發向一個未指定的IP地址的請求。主服務器將不會用于伺服任何請求。

      為單獨一個端口配置"_default_"虛擬主機
      如果我們只想在80端口上建立唯一的一個"_default_"虛擬主機,我們應該這樣配置:

      服務器配置
      <VirtualHost _default_:80>
      DocumentRoot /www/default
      ...
      </VirtualHost>

      發向一個未指定地址的80端口的請求將會由這個虛擬主機伺服;而發向未設定地址的其他端口的請求則由主服務器伺服。

      將一個基于域名的虛擬主機移植為一個基于IP的虛擬主機
      如果一個具有ww.example.org域名的虛擬主機(就是基于域名配置示例中的第二個)得到了自己的IP地址。為了避免一些域名服務器或代理服務器在移植期間仍對這個域名做老的解析,我們可以采用一種過渡方法:同時提供新舊兩個IP地址的解析。

      達到這個目的很簡單。因為我們只要簡單的把新地址(172.20.30.50)加入VirtualHost指令就行了。

      服務器配置
      Listen 80
      ServerName www.example.com
      DocumentRoot /www/example1

      NameVirtualHost 172.20.30.40

      <VirtualHost 172.20.30.40 172.20.30.50>
      DocumentRoot /www/example2
      ServerName www.example.org
      # ...
      </VirtualHost>

      <VirtualHost 172.20.30.40>
      DocumentRoot /www/example3
      ServerName www.example.net
      ServerAlias *.example.net
      # ...
      </VirtualHost>

      現在這個虛擬主機就可以用新地址(表現為一個基于IP的虛擬主機)和舊地址(表現為一個基于域名的虛擬主機)同時進行訪問了。

      使用ServerPath指令
      如果我們在同一個服務器上運行了兩個基于域名的虛擬主機。為了匹配正確的虛擬主機,客戶端必須發送正確的"Host:" 頭。而舊的使用HTTP/1.0的客戶端無法發送這樣的頭,這樣Apache就無法辨別客戶端想要連接哪個虛擬主機(會用主虛擬主機來伺服這個請求)。為 了盡量提供向下兼容性,我們可以提供一個主虛擬主機來返回一個頁面,在頁面中加入指向基于域名的虛擬主機的URL前綴的鏈接。

      服務器配置
      NameVirtualHost 172.20.30.40

      <VirtualHost 172.20.30.40>
      # 主虛擬主機
      DocumentRoot /www/subdomain
      RewriteEngine On
      RewriteRule ^/.* /www/subdomain/index.html
      # ...
      </VirtualHost>

      <VirtualHost 172.20.30.40>
      DocumentRoot /www/subdomain/sub1
      ServerName www.sub1.domain.tld
      ServerPath /sub1/
      RewriteEngine On
      RewriteRule ^(/sub1/.*) /www/subdomain$1
      # ...
      </VirtualHost>

      <VirtualHost 172.20.30.40>
      DocumentRoot /www/subdomain/sub2
      ServerName www.sub2.domain.tld
      ServerPath /sub2/
      RewriteEngine On
      RewriteRule ^(/sub2/.*) /www/subdomain$1
      # ...
      </VirtualHost>

      由于ServerPath指令的作用,發送到htp://www.sub1.domain.tld/sub1/的請求總會被sub1-vhost所伺服。
      如果客戶端發送了正確的"Host:"頭,發送到htp://www.sub1.domain.tld、的請求只會被sub1-vhost所伺服。如果沒有發送"Host:"頭,客戶端將會得到從主虛擬主機發送的信息頁面。

      請注意,這里還有一點小問題:如果客戶端沒有發送"Host:"頭,發送到http://www.sub2.domain.tld/sub1/的請求還是會被sub1-vhost所伺服。

    posted on 2010-11-03 14:57 robbin163 閱讀(2713) 評論(0)  編輯  收藏 所屬分類: WEB MVC

    <2025年5月>
    27282930123
    45678910
    11121314151617
    18192021222324
    25262728293031
    1234567

    常用鏈接

    留言簿(3)

    隨筆分類

    隨筆檔案

    文章分類

    文章檔案

    搜索

    •  

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 免费看男人j放进女人j免费看| 青青免费在线视频| 国产亚洲综合色就色| 亚洲AV成人无码久久精品老人| 99亚洲精品高清一二区| 亚洲一级免费毛片| 亚洲欧美黑人猛交群| 九九99热免费最新版| 免费成人福利视频| 日韩免费视频播放| 亚洲春色在线视频| 黄网站在线播放视频免费观看| 日韩免费高清视频| 国产成人亚洲精品91专区高清| 99久久99热精品免费观看国产 | 黄页免费在线观看 | 亚洲人成影院在线| 美女视频黄a视频全免费网站一区| 国产成人免费福利网站| 自怕偷自怕亚洲精品| 国产A∨免费精品视频| 欧洲乱码伦视频免费| 久久精品国产亚洲7777| 亚洲人成网站18禁止久久影院| 国产精品内射视频免费| 亚洲av色福利天堂| 免费精品国产日韩热久久| 亚洲精华国产精华精华液| 99久久久精品免费观看国产 | 国产免费小视频在线观看| 成人亚洲国产va天堂| 7x7x7x免费在线观看| 亚洲综合精品香蕉久久网| 思思久久99热免费精品6| 啦啦啦www免费视频| 亚洲一卡2卡三卡4卡有限公司| 一个人免费高清在线观看| 亚洲国产精品线观看不卡| 91频在线观看免费大全| 男男黄GAY片免费网站WWW| 亚洲av色福利天堂|