apache2 2 虛擬主機配置

2021-09-06 23:59:35 字數 3885 閱讀 3801

#loadmodule vhost_alias_module modules/mod_vhost_alias.so
去掉#意思是啟用apache的虛擬主機功能。 

#include conf/extra/httpd-vhosts.conf
去掉這一行的#意思是從conf/extra/httpd-vhosts.conf這個檔案匯入虛擬主機配置

開啟該檔案。看到下面類似內容。

虛擬主機的配置也是參照下面內容配置。

下面對該內容進行解說

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或標籤定義的請求,都會被作為虛擬主機處理,而主server將不理會。namevirtualhost定義了而標籤未定義的的請求,server會找不到對應的虛擬主機而將無法處理。所以每乙個namevirtualhost定義的引數至少要有乙個相匹配。

注意3:假設設定namevirtualhost 或為*:80的話,全部針對80port的請求,都會被虛擬主機處理,請求會依據網域名稱指向某個虛擬主機。

假設有來自80port的請求。而所請求的網域名稱沒有被配置為虛擬主機,那將指向第乙個虛擬主機。這樣主server將無法收到來自80port的不論什麼請求。

為此也要為主server配置乙個虛擬主機。

serveradmin 管理員郵箱

documentroot 站點資料夾 (注意:假設站點資料夾中的路徑有空格。請在路徑兩端加上雙引號)

servername 要繫結的網域名稱(必填)

serveralias 要繫結的虛擬主機的別名。(可選。假設多個網域名稱,中間以空格分隔,假設沒有。則去掉該行)

支援*,?兩種萬用字元。比方 *.abc.com,表示隨意乙個abc.com的二級網域名稱都可訪問。

customlog 使用者日誌檔案(可選,假設不須要。則去掉該行)

errorlog 錯誤日誌(可選,假設不須要。則去掉該行)

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的虛擬主機。

二、虛擬主機指定的port必須是listen定義的。假設虛擬主機沒有指定port。則覺得是80port。

假設namevirtualhost * 這樣定義,是指全部位址的全部已定義port。

三、更詳細的位址定義優先。比方namevirtualhost指令定義了*:80,而某個基於ip的虛擬主機定義為192.168.0.1:80,那麼此時如有對192.168.0.1:80的請求,那請求會被優先指向192.168.0.1:80定義的虛擬主機。所以為了避免混亂。不要定義相互有交叉或包括的位址區間。

四、乙個虛擬主機。能夠同一時候為基於網域名稱和基於ip的。如上一例中最後乙個虛擬主機。這樣符合兩種定義的請求都會被指同乙個虛擬主機。有時要差別內外網對虛擬主機的訪問時能夠這樣,由於來自內網的請求可能和來自外網的請求可能不一樣,可是它們須要指向同乙個虛擬主機。

這個虛擬主機能夠理解成基於ip的虛擬主機

documentroot /www/default

這個虛擬主機將接管與其他虛擬主機ip和port不匹配的請求。只是如此一來。主server將不會處理不論什麼請求。因此把主server配置成乙個虛擬主機是必要的。

本地機器**在其他機器上執行的虛擬主機

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,即監聽8080port

2、配置虛擬主機配置

#namevirtualhost 61.122.3.6:8080 這一行能夠不須要。經測試,基於ip位址的虛擬主機可不用設定namevirtualhost專案。
serveradmin [email protected] documentroot "d:/web/openj"

apache2 2 虛擬主機配置

plain view plain copy loadmodule vhost alias module modules mod vhost alias.so 去掉 意思是啟用apache的虛擬主機功能。去掉這一行的 意思是從conf extra httpd vhosts.conf這個檔案匯入虛擬主機...

apache2 2 虛擬主機配置

plain view plain copy loadmodule vhost alias module modules mod vhost alias.so 去掉 意思是啟用apache的虛擬主機功能。去掉這一行的 意思是從conf extra httpd vhosts.conf這個檔案匯入虛擬主機...

apache2 2 虛擬主機配置

loadmodule vhost alias module modules mod vhost alias.so去掉 意思是啟用apache的虛擬主機功能。include conf extra httpd vhosts.conf去掉這一行的 意思是從conf extra httpd vhosts.c...