開啟apache的安裝目錄,找到httpd.conf檔案,分別去掉下面兩行文字前面的#號。
[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"
配置php Apache環境
配置php 配置mysql 為什麼要搭建php mysql呢 這或許是前端工程師發展為全棧的重要一步。剛開始接觸前端時,我僅僅滿足於學好了h5 js這些語言,畢竟人的職業最好是從興趣開始,這些標籤化 響應式的設計讓人很快地能看到自己的成果。但是逐漸地我發現了,很難用到之間在專業裡學習的演算法等知識,...
php apache伺服器虛擬主機配置
c盤 windows system32 drivers etc hosts 配置內容 127.0.0.1 自定義網域名稱 d盤 phpstudy phptutorial apache conf httpd.conf 配置內容 ctr f查詢vhos 在470行去掉注釋符根據引用路徑查詢下乙個配置檔案...
Linux安裝配置php apache
安裝libxml2 安裝 apt get install libxml2 dev 1 tar zxvf libxml2 2.6.32.tar.gz 2 cd libxml2 2.6.32 3 configure prefix usr local libxml2 4 make 5 make insta...