[plain]view plain
copy
#loadmodule vhost_alias_module modules/mod_vhost_alias.so
去掉#意思是啟用apache的虛擬主機功能。
去掉這一行的#意思是從conf/extra/httpd-vhosts.conf這個檔案匯入虛擬主機配置
開啟該檔案,看到以下類似內容。虛擬主機的配置也是參照以下內容配置。下面對該內容進行講解
[plain]view plain
copy
namevirtualhost *: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
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 錯誤日誌(可選,如果不需要,則去掉該行)
[plain]view plain
copy
documentroot /www/example1
servername www.example.com
[plain]view plain
copy
documentroot /www/example2
servername www.example.org
每個虛擬主機可定義多個ip,之間用空格隔開
[plain]view plain
copy
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的。如上一例中最後乙個虛擬主機。這樣符合兩種定義的請求都會被指同乙個虛擬主機。有時要區別內外網對虛擬主機的訪問時可以這樣,因為來自內網的請求可能和來自外網的請求可能不一樣,但是它們需要指向同乙個虛擬主機。
這個虛擬主機可以理解成基於ip的虛擬主機
[plain]view plain
copy
documentroot /www/default
這個虛擬主機將接管與其它虛擬主機ip和埠不匹配的請求。不過如此一來,主伺服器將不會處理任何請求。因此把主伺服器配置成乙個虛擬主機是必要的。
本地機器**在其它機器上執行的虛擬主機
[plain]view plain
copy
proxypreservehost on
proxypass /foo/no !
proxypass /foo
proxypassreverse /foo
servername hostname.example.com
一、首先這是乙個基於ip的虛擬主機,它接收並處理對ip位址158.29.33.248的請求。
二、proxypass /foo 將把對的請求轉換為乙個**請求,該請求指向。
三、proxypass /foo/no ! 不**針對/foo/no的請求。這個必須放在正常**指令之前。
四、proxypreservehost on 意思是傳送原始請求的host資訊給被**的機器。
五、proxypassreverse /foo 可以保證請求url在其它機器上被重定向後,本機處理時也可以保持一致。具體看手冊關於反向**的部分。
六、基於網域名稱的虛擬主機也是同樣的道理。不管是什麼型別的虛擬主機,它只是處理歸它處理的請求而已。
配置例項
需求1:
這是乙個基於ip的虛擬主機使用例項
乙個專案資料應用,為了防止由於網域名稱解析問題導致不能正常訪問,因此採用ip的方式訪問介面。比如: 這樣的方式。虛擬主機的配置如下:
1、在httpd.conf中listen 80下面增加一行,內容為:listen 8080,即監聽8080埠
2、配置虛擬主機配置
[plain]view plain
copy
#namevirtualhost 61.122.3.6:8080 這一行可以不需要。經測試,基於ip位址的虛擬主機可不用設定namevirtualhost項。
serveradmin [email protected]
documentroot "d:/web/openj"
apache虛擬主機配置
之前已經在csdn上上傳過apache的文件在這裡補充說明一下,apache2.2.x與tomcat或iis或三者之間的虛擬主機配置。介紹一下如何整合其他 web伺服器,如 iis tomcat 等。網上有 n多整合方案講的都不是很清楚 特別是 windows 下的 這裡要特別提示一下,apache...
apache虛擬主機配置
多個網域名稱 伺服器 對應乙個 ip 位址,配置方法為 namevirtualhost 111.22.33.44 servername www.sample.com documentroot www sample servername www.sample2.com documentroot www...
apache配置虛擬主機
namevirtualhost 80 directoryindex default.php index.html index.php index.htm servername www.host1.com servername host1 com documentroot d wamp www1 er...